1.从星航博主那搬的代码

原文链接:https://blog.csdn.net/weixin_42953003/article/details/119751529

2.这里用控制台调用了一下,附上代码

namespace PictureCompress
{internal class Program{static void Main(string[] args){Image img=Image.FromFile(@"D:\证件照白底.jpg");//文件路径img= ZipImage(img,GetImageFormat(img),200);//限制文件大小200kimg.Save(@"D:\test.jpg");//保存路径Console.ReadLine();}public static Image ZipImage(Image img, ImageFormat format, long targetLen, long srcLen = 0){//设置大小偏差幅度 10kbconst long nearlyLen = 10240;//内存流  如果参数中原图大小没有传递 则使用内存流读取var ms = new MemoryStream();if (0 == srcLen){img.Save(ms, format);srcLen = ms.Length;}//单位 由Kb转为byte 若目标大小高于原图大小,则满足条件退出targetLen *= 1024;if (targetLen > srcLen){ms.SetLength(0);ms.Position = 0;img.Save(ms, format);img = Image.FromStream(ms);return img;}//获取目标大小最低值var exitLen = targetLen - nearlyLen;//初始化质量压缩参数 图像 内存流等var quality = (long)Math.Floor(100.00 * targetLen / srcLen);var parms = new EncoderParameters(1);//获取编码器信息ImageCodecInfo formatInfo = null;var encoders = ImageCodecInfo.GetImageEncoders();foreach (ImageCodecInfo icf in encoders){if (icf.FormatID == format.Guid){formatInfo = icf;break;}}//使用二分法进行查找 最接近的质量参数long startQuality = quality;long endQuality = 100;quality = (startQuality + endQuality) / 2;while (true){//设置质量parms.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, quality);//清空内存流 然后保存图片ms.SetLength(0);ms.Position = 0;img.Save(ms, formatInfo, parms);//若压缩后大小低于目标大小,则满足条件退出if (ms.Length >= exitLen && ms.Length <= targetLen){break;}else if (startQuality >= endQuality) //区间相等无需再次计算{break;}else if (ms.Length < exitLen) //压缩过小,起始质量右移{startQuality = quality;}else //压缩过大 终止质量左移{endQuality = quality;}//重新设置质量参数 如果计算出来的质量没有发生变化,则终止查找。这样是为了避免重复计算情况{start:16,end:18} 和 {start:16,endQuality:17}var newQuality = (startQuality + endQuality) / 2;if (newQuality == quality){break;}quality = newQuality;//Console.WriteLine("start:{0} end:{1} current:{2}", startQuality, endQuality, quality);}img = Image.FromStream(ms);return img;}/// <summary>///获取图片格式/// </summary>/// <param name="img">图片</param>/// <returns>默认返回JPEG</returns>public static ImageFormat GetImageFormat(Image img){if (img.RawFormat.Equals(ImageFormat.Jpeg)){return ImageFormat.Jpeg;}if (img.RawFormat.Equals(ImageFormat.Gif)){return ImageFormat.Gif;}if (img.RawFormat.Equals(ImageFormat.Png)){return ImageFormat.Png;}if (img.RawFormat.Equals(ImageFormat.Bmp)){return ImageFormat.Bmp;}return ImageFormat.Jpeg;//根据实际情况选择返回指定格式还是null}}
}

C#压缩图片文件大小相关推荐

  1. 如何压缩图片文件大小到20K,一招搞定

    如何压缩图片文件大小到20K,想要将图片文件压缩到20K就需要用到压缩软件来进行操作,很多人不知道怎么操作压缩软件,下面小编就为大家分享一下压缩软件压缩图片到20K的方法. 操作软件:迅捷压缩软件 1 ...

  2. bitmap compress 图片压缩 图片文件大小处理

    android中图片加载到内存中所占空间大小计算:分辨率 height*width*一个像素所占空间大小 解析:decode时指定解码方式为ARGB_8888 代表用8位表示透明度(A),8位表示红色 ...

  3. 怎么压缩图片文件大小?小白都能学会的方法分享

    大家在上传图片时,是不是会经常遇到图片文件过大无法发送的情况?这时候我们经常需要想方设法的把图片裁剪成合适的大小或者反复下载保存来降低清晰度,达到可以上传的要求. 可是这样一番折腾之后,图片也失去了原 ...

  4. 怎么将jpg压缩图片文件大小?如何缩小图片大小kb?

    平时我们常会接收或者发送很多jpg格式的图片,如果图片体积过大,会占用我们很多的内存空间,而当我们发送时,如果图片体积过大,又会减慢我们的传输速度.那么有没有办法可以将jpg图片压缩呢?想要实现jpg ...

  5. java 使用Thumbnailator 上传图片 并压缩图片大小

    http://www.cnblogs.com/miskis/p/5500822.html java 上传图片 并压缩图片大小 Thumbnailator 是一个优秀的图片处理的Google开源Java ...

  6. python --压缩图片不改变图片尺寸

    方法1 from PIL import Image import osdef compress_image(infile, outfile, quality=50):""" ...

  7. 压缩png命令cmd_PNG图片文件大小怎么改变

    使用PhotoShop打开要优化的PNG图片,点击菜单"文件"→"存储为WEB格式...". 2 在"存储为WEB格式"对话框中将预设值设置 ...

  8. 怎么把图片文件大小压缩到25k到40k还比较清晰

    怎么把图片文件大小压缩到25k到40k还比较清晰 我们在网上报名上传照片经常会遇着这种情况:1.小两寸免冠照片 ,2.照片文件格式必须是.jpg ,3.文件大小必须在25K(25600字节)到40K( ...

  9. 怎么压缩jpg图片文件大小?jpg图片格式的压缩方法

    经常写公众号文章的小伙伴,应该遇到过插入jpg图片时失败的情况,这是因为图片超出了平台的上传限制,需要先把过大的图片压缩变小,该怎么压缩jpg图片大小呢?小编来给大家介绍一个jpg格式压缩的方法,使用 ...

  10. 压缩图片_Word快速压缩图片大小

    (每周一.三.五更新) 有朋友发消息说,TA的一份Word文档中,由于插入了很多图片,所以文件大小变得很大,无法上传到网上的工作平台上.询问快速解决的办法.其实在Word里,有专门调整图片大小的工具, ...

最新文章

  1. 《大厂算法面试题目与答案汇总,剑指offer等常考算法题思路,python代码》V1.0版...
  2. iscsi没有可用于使用快速连接登陆的目标_iSCSI的基本架构及操作简介
  3. iQOO3Android11稳定版,vivo安卓11来了iQOO3 NEX3S尝鲜Androi11测试版!
  4. Test传送门(更新中)
  5. java.util.ListIterator
  6. HDOJ 5184 Brackets 卡特兰数扩展
  7. 简述tcp协议的可靠性有哪些机制_腾讯面试HTTP与TCP/IP20连问,你能答出多少?
  8. Microsoft Visual Studio .NET 2003 编译xvidcore-1.1.3
  9. android百度地图注册,百度地图API key申请申请详细步骤
  10. 【阿里云镜像】更改阿里巴巴开源镜像站镜像之——CentOS镜像
  11. [你好,2022] 月落乌啼霜满天,江枫渔火对愁眠
  12. linux mysql max_allowed_packet_Linux服务器上如何设置MySQL的max_allowed_packe
  13. 产品经理负责制的诱惑与窘迫
  14. 11、数据分析--逻辑回归
  15. 计算机网络—数据交换方式
  16. Java故障记录——OutOfMemoryError
  17. hive-5(窗口函数)
  18. 防止微信H5下拉出现域名究极解决方案
  19. Mysql中decode函数的几种用法
  20. php 事件,php的事件处理机制(回调函数)

热门文章

  1. python总结大纲:适合初学者与有经验的人快速查找遗忘的知识点
  2. 使用uniapp实现全局悬浮按钮(可拖动)
  3. UGI九宫格sliced显示问题
  4. 联想G50-70无线网开关,无线网显示红叉
  5. html绘制钟表的原理,html5 canvas绘制钟表
  6. 使用MagicIndicator+ViewPager2出现requestLayout() improperly called by
  7. java怎么查看源代码
  8. 8脚 tja1050t_TJA1050TD-T_PDF技术资料下载_货期信息(1/10)_NXP - 万联芯城
  9. SQL Server 2019下载安装教程
  10. 小码哥C++学院-零基础入门C语言