delphi将图片转换成Base64编码函数
{**************************************************************************
名称: 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编码函数的更多相关文章
- Java对网络图片/本地图片转换成Base64编码和解码
一.将本地图片转换成Base64编码字符串 /** * 将本地图片转换成Base64编码字符串 * * @param imgFile 图片目录路径 * @return */ public static ...
- 利用PHP将图片转换成base64编码的实现方法
先来说一下为什么我们要对图片base64编码 base64是当前网络上最为常见的传输8Bit字节代码的编码方式其中之一.base64主要不是加密,它主要的用途是把某些二进制数转成普通字符用于网络传输. ...
- 图片转换成Base64编码集成到html文件
首先为什么要这么做? 原因很简单这样可以减少与服务器的请求,当然对于一些浏览器并不支持,如IE8.通常用在手机版网站中,具体转化方法如下: 1.在线打开Base64的编码器将图片编码成Base64 ...
- Base64字符保存图片,图片转换成Base64字符编码
//文件转换成Base64编码 public static String getFileBase64Str(String filePath) throws IOException { String f ...
- java 图片转换成base64字符串
import java.io.ByteArrayOutputStream; import java.io.FileInputStream;import java.io.FileOutputStream ...
- js绝对地址图片转换成base64的方法
//将图片转换成base64 function getBase64Image(url, callback){ var canvas = document.createElement('canvas') ...
- JS将图片转换成Base64码
直接上代码 html页面代码 <!DOCTYPE html> <html lang="en"> <head> <meta charset= ...
- lua 把图片转换成base64
调用实例 require("ZZBase64") local files local file = io.open("E:\\2342.jpg","r ...
- 图片文件转换成Base64编码实现ajax提交图片
//上传头像图片 function uploadHead(imgPath) { console.log("imgPath = " + imgPath); var image = n ...
随机推荐
- python3之scrapy安装使用
需要安装的包 pip install scrapy selenium 可能需要卸载重装的模块 lxml cryptography cffi pypiwin32 pip uninstall xx ...
- Nginx httpS server配置
Nginx httpS 配置 配置同时支持http和httpS协议: server { listen ; #backlog:每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包 ...
- Java-Maven-Runoob:Maven 仓库
ylbtech-Java-Maven-Runoob:Maven 仓库 1.返回顶部 1. Maven 仓库 在 Maven 的术语中,仓库是一个位置(place). Maven 仓库是项目中依赖的第三 ...
- C#字符串Split方法的误区
string s = "aaa1bbb2ccc1ddd"; string[] ss = s.Split("12".ToCharArray()); ...
- 什么是闭包?在js中的作用是什么?
闭包就是讲函数内部生成的变量保存到内存中,进行下次调用:也可以说函数外不可以调用函数内部的变量: 当函数内部返回一个函数时,闭包搭建了方法内部与方法外部的桥梁,使得外部也可以任意的获取到方法内部的资源 ...
- python's twelth day for me
闭包: 内层函数对外层函数的变量(非全局变量)的引用. python 遇到闭包,有一个机制,会开辟一个空间,将闭包中的全部变量放入其中.且不会随着函数的结束而关闭. 闭包的完美体现:装饰器. 打印函数 ...
- oracle——存储过程参数
oracle 存储过程类型: 1.in:输入类型,即由应用程序将数据传入oracle存储过程中:这种参数在存储过程中是只读参数,在存储过程中无法对该类型的参数进行修改: 2.out:输出参数,是在存储 ...
- Python基础学习五 内置函数
1.函数补充: 1)函数返回值return可以有多个 2)补充示例: nums = [0,1,2,3,4,5,6,7,8] #如何将list里面的元素变为字符串类型 new_nums = [str(x ...
- BP算法的推导
反向传播算法的推导 如图为2-layers CNN,输入单元下标为i,数量d:隐层单元下表j,数量\(n_H\):输出层下表k,单元数量c 1.目标 调整权系数\(w_{ji}\),\(w_{kj}\ ...
- [luogu3391] 【模板】文艺平衡树(fhq-treap反转区间)
解题关键:无旋treap模板. #include<iostream> #include<cstdio> #include<cstring> #include< ...