当前位置: 首页 > news >正文

C# 图片按比例进行压缩

1、对图片进行压缩,保存在本地

对于一个200k的png文件按0.6的缩放比例进行压缩,压缩后的大小为20k左右

对于一个80k的jpg文件按0.6的缩放比例压缩,压缩后为13k左右

public void imageZoom(string name, Double zoomScale){Bitmap btImage = new Bitmap(name);Image serverImage = btImage;int width = (int)(serverImage.Width * zoomScale);int height = (int)(serverImage.Height * zoomScale);//画板大小int finalWidth = width, finalHeight = height;int srcImageWidth = serverImage.Width;int srcImageHeight = serverImage.Height;if (srcImageWidth > srcImageHeight){finalHeight = srcImageHeight * width / srcImageWidth;}else{finalWidth = srcImageWidth * height / srcImageHeight;}//新建一个bmp图片Image newImage = new Bitmap(width, height);//新建一个画板Graphics g = Graphics.FromImage(newImage);//设置高质量插值法g.InterpolationMode = InterpolationMode.High;//设置高质量,低速度呈现平滑程度g.SmoothingMode = SmoothingMode.HighQuality;//清空画布并以透明背景色填充g.Clear(Color.White);//在指定位置并且按指定大小绘制原图片的指定部分g.DrawImage(serverImage, new Rectangle((width - finalWidth) / 2, (height - finalHeight) / 2, finalWidth, finalHeight), 0, 0, srcImageWidth, srcImageHeight, GraphicsUnit.Pixel);//以jpg格式保存缩略图MemoryStream msSaveImage = new MemoryStream();newImage.Save(@"D:\1.png",ImageFormat.Jpeg);serverImage.Dispose();newImage.Dispose();g.Dispose();}
 private void button1_Click(object sender, EventArgs e){OpenFileDialog ofd = new OpenFileDialog();ofd.ShowDialog();imageZoom(ofd.FileName,0.6);}

2、对图片进行压缩,转换成Base64后进行传输,可测量字符串长度来对比

对一张图片转换成base64后,测量base64字符串的长度,对于一个80k的图片,压缩前长度为110800多,压缩后长度不到20000,减小了很多,便于传输。

网上有关于对字符串进行压缩的,那是针对纯字符串,对于已经转换成base64的字符串,使用GZipStream类来压缩数据基本上没有效果。

public  string ImageToBase64(string name,Double zoomScale){Bitmap btImage = new Bitmap(name);Image serverImage = btImage;int width = (int)(serverImage.Width * zoomScale);int height = (int)(serverImage.Height * zoomScale);//画板大小int finalWidth = width, finalHeight = height;int srcImageWidth = serverImage.Width;int srcImageHeight = serverImage.Height;if (srcImageWidth > srcImageHeight){finalHeight = srcImageHeight * width / srcImageWidth;}else{finalWidth = srcImageWidth * height / srcImageHeight;}//新建一个bmp图片Image newImage = new Bitmap(width, height);//新建一个画板Graphics g = Graphics.FromImage(newImage);//设置高质量插值法g.InterpolationMode = InterpolationMode.High;//设置高质量,低速度呈现平滑程度g.SmoothingMode = SmoothingMode.HighQuality;//清空画布并以透明背景色填充g.Clear(Color.White);//在指定位置并且按指定大小绘制原图片的指定部分g.DrawImage(serverImage, new Rectangle((width - finalWidth) / 2, (height - finalHeight) / 2, finalWidth, finalHeight), 0, 0, srcImageWidth, srcImageHeight, GraphicsUnit.Pixel);//以jpg格式保存缩略图MemoryStream msSaveImage = new MemoryStream();newImage.Save(msSaveImage, ImageFormat.Jpeg);serverImage.Dispose();newImage.Dispose();g.Dispose();byte[] imageBytes = msSaveImage.ToArray();msSaveImage.Close();return Convert.ToBase64String(imageBytes);}

http://www.lryc.cn/news/184845.html

相关文章:

  • 猜猜 JavaScript 输出:(! + [] + [] + ![]).length
  • MTK Android12静默安装接口
  • 基于电容电流前馈与电网电压全前馈的三相LCL并网逆变器谐波抑制Simulink仿真
  • Python数据攻略-Pandas与统计数据分析
  • 【gcc】RtpTransportControllerSend学习笔记 1
  • 若依分离版-前端使用
  • 微信小程序-2
  • 卷积神经网络的发展历史-ResNet
  • 基于瞬时无功功率ip-iq的谐波信号检测Simulink仿真
  • node安装,nvm管理器
  • 华为云云耀云服务器L实例评测|Ubuntu云锁防火墙安装搭建使用
  • C# OpenCvSharp 实现迷宫解密
  • 趣味工具箱小程序源码
  • 互联网Java工程师面试题·Redis 篇·第二弹
  • FreeRTOS入门教程(信号量的概念及API函数使用)
  • 简易版Pycharm(2023)+Conda开发环境配置教程
  • 深入浅出,SpringBoot整合Quartz实现定时任务与Redis健康检测(二)
  • 小谈设计模式(22)—单例模式
  • 华为OD机考算法题:分班
  • 【gcc】RtpTransportControllerSend学习笔记 3:gcc
  • CSP-J第二轮试题-2019年-3题
  • 数据库:Hive转Presto(三)
  • 【AI视野·今日Robot 机器人论文速览 第四十八期】Thu, 5 Oct 2023
  • 学信息系统项目管理师第4版系列20_风险管理
  • 卷积神经网络的发展历史-VGG
  • qt解决信号和槽连接时传递额外参数的问题
  • 『力扣每日一题14』:消失的数字
  • 【b站韩顺平 快速学Java课】Java的JDK8(包括公共JRE8)安装教程 总结
  • Spark 弹性分布式数据集 RDD
  • 电脑被删除的文件怎么恢复?2023年数据恢复方法分享