{**************************************************************************
名称: BaseImage
参数: fn: TFilename
返回值: string
功能: 将fn文件转换成Base64编码,返回值为编码
**************************************************************************}
uses EncdDecd;
function BaseImage(fn: string): string;
var
m1: TMemoryStream;
m2: TStringStream;
str: string;
begin
m1 := TMemoryStream.Create;
m2 := TStringStream.Create;
m1.LoadFromFile(fn);
EncdDecd.EncodeStream(m1, m2); // 将m1的内容Base64到m2中
str := m2.DataString;
str := StringReplace(str, #13, '', [rfReplaceAll]); // 这里m2中数据会自动添加回车换行,所以需要将回车换行替换成空字符
str := StringReplace(str, #10, '', [rfReplaceAll]);
result := str; // 返回值为Base64的Stream
m1.Free;
m2.Free;
end;

转成base64后,MemoryStream比原图的流小,便于上传。

//先压缩图片,再将压缩的图片转换成base64
var
m1: TMemoryStream; // base64的图片
m2: TStringStream; // 压缩之后的图片
jpg: TJpegImage; // jpg原图
bmp: TBitmap; // bmp压缩转换
begin
jpg := TJpegImage.Create;
bmp := TBitmap.Create;
m1 := TMemoryStream.Create;
m2 := TStringStream.Create;
jpg.LoadFromFile('d:/test.jpg');
bmp.Width := jpg.Width div 2;
bmp.Height := jpg.Height div 2;
bmp.Canvas.StretchDraw(bmp.Canvas.ClipRect, jpg);
jpg.Assign(bmp);
jpg.Compress;
jpg.CompressionQuality := 70;
jpg.SaveToStream(m1);
m1.Position := 0; // 一定要还原指针,才能base64
EncdDecd.EncodeStream(m1, m2);
memo1.Lines.Add(m2.DataString.Replace(#13, '').Replace(#10, ''));
m2.SaveToFile('d:/base64.txt');
m1.SaveToFile('d:/base64-01.txt');
bmp.Free;
jpg.Free;
m1.Free;
m2.Free;
end;

这里我出了一个错误,就是在压缩图片后,直接加载到base64后,m2中没有内容,

但把m1.clear后,再加载是有内容的,刚开始我也不知道,很奇怪的问题,

但后来问了大神,说要m1.position := 0;置为0后,才能加载。

原因在于转换成base64时,m1指针在最后一位,但转换时又是从指针开始,

所以指针后面会没内容。(又进一步的理解指针了)

procedure Base64Put(Base64Str,FileName:String);//base64字符串保存为文件  // 解码
var
m:TMemoryStream;
b:TBytes;
begin
b:=DecodeBase64(Base64Str);
m:=TMemoryStream.Create;
m.Write(b,length(b));
m.SaveToFile(FileName);
FreeAndNil(m);
end; function Base64Get(FileName:String):String;//读出文件内容为base64字符串 // 转码
var
m:TMemoryStream;
s:TStringStream;
begin
result:='';
if(FileExists(FileName)) then begin
m:=TMemoryStream.Create;
s:=TStringStream.Create;
m.LoadFromFile(FileName);
encddecd.EncodeStream(m,s);
result:=s.DataString;
FreeAndNil(m);
FreeAndNil(s);
end;
end;

delphi将图片转换成Base64编码函数的更多相关文章

  1. Java对网络图片/本地图片转换成Base64编码和解码

    一.将本地图片转换成Base64编码字符串 /** * 将本地图片转换成Base64编码字符串 * * @param imgFile 图片目录路径 * @return */ public static ...

  2. 利用PHP将图片转换成base64编码的实现方法

    先来说一下为什么我们要对图片base64编码 base64是当前网络上最为常见的传输8Bit字节代码的编码方式其中之一.base64主要不是加密,它主要的用途是把某些二进制数转成普通字符用于网络传输. ...

  3. 图片转换成Base64编码集成到html文件

    首先为什么要这么做?  原因很简单这样可以减少与服务器的请求,当然对于一些浏览器并不支持,如IE8.通常用在手机版网站中,具体转化方法如下: 1.在线打开Base64的编码器将图片编码成Base64 ...

  4. Base64字符保存图片,图片转换成Base64字符编码

    //文件转换成Base64编码 public static String getFileBase64Str(String filePath) throws IOException { String f ...

  5. java 图片转换成base64字符串

    import java.io.ByteArrayOutputStream; import java.io.FileInputStream;import java.io.FileOutputStream ...

  6. js绝对地址图片转换成base64的方法

    //将图片转换成base64 function getBase64Image(url, callback){ var canvas = document.createElement('canvas') ...

  7. JS将图片转换成Base64码

    直接上代码 html页面代码 <!DOCTYPE html> <html lang="en"> <head> <meta charset= ...

  8. lua 把图片转换成base64

    调用实例 require("ZZBase64") local files local file = io.open("E:\\2342.jpg","r ...

  9. 图片文件转换成Base64编码实现ajax提交图片

    //上传头像图片 function uploadHead(imgPath) { console.log("imgPath = " + imgPath); var image = n ...

随机推荐

  1. laravel 网站速率优化

    https://segmentfault.com/a/1190000009954966

  2. 1、python基础速成

    基础模块 def prt(age,name):#函数定义 print("%s is %d 年龄 old"%(name,age)) if __name__=="__main ...

  3. YUV

    https://msdn.microsoft.com/en-us/library/aa904813(VS.80).aspx

  4. 微服务监控之二:Metrics+influxdb+grafana构建监控平台

    系统开发到一定的阶段,线上的机器越来越多,就需要一些监控了,除了服务器的监控,业务方面也需要一些监控服务.Metrics作为一款监控指标的度量类库,提供了许多工具帮助开发者来完成自定义的监控工作. 使 ...

  5. 1138 Postorder Traversal

    题意:给出二叉树的前序序列后中序序列,输出其后序序列的第一个值. 思路:乍一看不就是前序+中序重建二叉树,然后后序遍历嘛!这么做当然不会有错,但是却没有真正领会本题的意图.本题并不是让我们输出后序序列 ...

  6. HTML注册页面验证注册信息

    在这里主要介绍两种验证方式,一种是点击注册按钮后会提示最上方的出错位置,弹出窗口提示格式不对.另一种是利用鼠标事件,在鼠标进行不同操作时会有不同的click事件. 这两种都是利用javascript, ...

  7. python开发socket套接字:套接字&通信循环&链接循环&模拟远程命令

    一,套接字 先从服务器端说起.服务器端先初始化Socket,然后与端口绑定(bind),对端口进行监听(listen),调用accept阻塞,等待客户端连接.在这时如果有个客户端初始化一个Socket ...

  8. C# 通用类型转换方法

    在程序开发过程中经常需要进行数据的类型转换,而且如果一个字段的类型改成另一个类型时,所有相关的类型转换的地方都要跟着修改,不但造成了很多重复转换的代码而且修改字段类型时额外修改相关转换代码的工作量也很 ...

  9. DVWA平台v1.8-反射型XSS(low级别)

    源代码 <?php if(!array_key_exists ("name", $_GET) || $_GET['name'] == NULL || $_GET['name' ...

  10. 修改Ubuntu默认apt下载源

    修改Ubuntu默认apt下载源 默认下载源很慢,改成阿里的下载速度超快 sudo vim /etc/apt/sources.list 将文件内容替换成 deb http://mirrors.aliy ...