function CutImgToBase(fn: string): string;  // 压缩图片只能压缩bmp:将jpg转换成bmp再压缩
var
m1: TMemoryStream;
m2: TStringStream;
jpg: TJPEGImage;
bmp: TBitmap;
begin
jpg := TJpegImage.Create;
bmp := TBitmap.Create;
m1 := TMemoryStream.Create;
m2 := TStringStream.Create;
jpg.LoadFromFile(fn);
bmp.Width := jpg.Width div 2;
bmp.Height := jpg.Height div 2;
bmp.Canvas.StretchDraw(bmp.Canvas.ClipRect, jpg);
jpg.Assign(bmp);
jpg.CompressionQuality := 30;
jpg.Compress; // 先指定大小再压缩
jpg.SaveToStream(m1);
m1.Position := 0; // 一定要还原指针,才能base64
EncdDecd.EncodeStream(m1, m2);
result := m2.DataString.Replace(#13, '').Replace(#10, '');
bmp.Free;
jpg.Free;
m1.Free;
m2.Free;
end;

调用函数:

procedure TForm2.Button4Click(Sender: TObject);   // 调用函数  压缩并编码
var
m: TStringStream;
s: string;
begin
s := CutImgToBase('test.jpg');
FilePutContents('mm.txt', s);
m := TStringStream.Create(s);
Memo1.Lines.Add(m.DataString);
m.SaveToFile('base64.txt');
end;

解码Base64测试:

procedure TForm2.DecodeBaseClick(Sender: TObject);   // 解码
var
m1: TStringStream;
m2: TMemoryStream;
begin
m1 := TStringStream.Create;
m2 := TMemoryStream.Create;
m1.LoadFromFile('base64.txt');
EncdDecd.DecodeStream(m1, m2);
m2.SaveToFile('1.jpg');
m1.Free;
m2.Free;
end;

将图片压缩后转Base64函数的更多相关文章

  1. 使用ajax上传图片,支持图片即时浏览,支持js图片压缩后上传给服务器

    使用ajax上传图片,支持图片即时浏览,支持js图片压缩后上传给服务器 ajax上传主要使用了 var reader = new FileReader() 此方法 js图片压缩主要是利用canvas进 ...

  2. html + js 实现图片上传,压缩,预览及图片压缩后得到Blob对象继续上传问题

    先上效果 上传图片后(设置了最多上传3张图片,三张后上传按钮消失) 点击图片放大,可以使用删除和旋转按钮 (旋转功能主要是因为ios手机拍照后上传会有写图片被自动旋转,通过旋转功能可以调正) html ...

  3. Vue directive自定义指令+canvas实现H5图片压缩上传-Base64格式

    前言 最近优化项目-手机拍照图片太大,回显速度比较慢,使用了vue的自定义指令实现H5压缩上传base64格式的图片 canvas自定义指令 Vue.directive("canvas&qu ...

  4. 在线图片压缩后以ImageIO 流的形式 设置大小显示指定页面

    1.Servlet   代码 public class ZoomImgServlet extends HttpServlet implements Servlet { public void init ...

  5. js/vue图片压缩

    js版 新建compressImage.js,内容如下: // 将base64转换为blob(有需要可加上,没需要可不加) function convertBase64UrlToBlob(urlDat ...

  6. JavaScript前端图片压缩

    实现思路 获取input的file 使用fileReader() 将图片转为base64 使用canvas读取base64 并降低分辨率 把canvas数据转成blob对象 把blob对象转file对 ...

  7. iOS图片压缩处理

    理解概念 首先,我们必须明确图片的压缩其实是两个概念: “压” 是指文件体积变小,但是像素数不变,长宽尺寸不变,那么质量可能下降. “缩” 是指文件的尺寸变小,也就是像素数减少,而长宽尺寸变小,文件体 ...

  8. Android性能优化之图片压缩优化

    1 分类Android图片压缩结合多种压缩方式,常用的有尺寸压缩.质量压缩.采样率压缩以及通过JNI调用libjpeg库来进行压缩. 参考此方法:Android-BitherCompress 备注:对 ...

  9. H5图片压缩上传

    1.所用到技术 HTML5 API:filereader.canvas 以及 formdata 目前来说,HTML5的各种新API都在移动端的webkit上得到了较好的实现.本次使用到的FileRea ...

随机推荐

  1. less预处理的好处,补充关于之前发表的rem单位的运用于计算

    我认识的less 优点:优雅,好用,简单,可复用性强, 缺点:less并其实不能为我们减少沉余css代码,还是要靠自己的CSS基础去判断哪些是沉余代码或者是可以合并的代码 之前发表的一篇文章一看就懂得 ...

  2. python第十七天-----Django初体验

    Django是一个MTV框架 M:models(数据库) T:templates(放置html模版) V:views(处理用户请求) 那么传说中的MVC框架又是什么呢? M:models(数据库) V ...

  3. 【译】RabbitMQ:路由(Routing)

    在前一篇中,我们构建了一个简单的日志系统,我们已经能够广播消息到许多的接收者.在这一篇中,我们希望增加一个特性,让订阅消息的子集成为可能.例如,我们可以将重要的错误日志存放到日志文件(即,磁盘上面), ...

  4. 启动WCF多个服务方法

    引用就不说明,直接贴上: using System;using System.Collections.Generic;using System.Linq;using System.Text;using ...

  5. git 常见命令

    查看.添加.提交.删除.找回,重置修改文件 git help <command> # 显示command的help git show # 显示某次提交的内容 git show $id gi ...

  6. 使用echarts

    <html> <head> <script type="text/javascript" src='echarts.min.js'></s ...

  7. 刨一刨内核container_of()的设计精髓

    新年第一帖,总得拿出点干货才行,虽然这篇水分还是有点大,大家可以晒干了温水冲服.这段时间一直在整理内核学习的基础知识点,期间又碰到了container_of()这个宏,当然还包括一个叫做offseto ...

  8. windows 8.1 下蓝屏报错:SYSTEM_SERVICE_EXCEPTION(NETIO.SYS)的解决办法

         大概2周前,电脑突然蓝屏了,我上网查了一下解决办法,因为大部分内容是英文的,所以我只大概看了下,看到这个问题好像是由于软件冲突造成的,于是就把小红伞去掉了,而那天电脑也真的没有再蓝屏(之前大 ...

  9. 动态加载jar包中的类(方式一)

    嘛, 直接上代码 public static class TestClassLoader extends ClassLoader { @Override protected Class<?> ...

  10. 三目运算符是不是在bug中躺了枪_折腾了一整天

    Hand_result = !String.IsNullOrEmpty(e.ReadString) ? e.ReadString : GetHandCodeReadStringFromResultXm ...