1、引用dll-----System.Drawing.dll

2、使用

bool isf = CompressImage(@"C:\ZZ_VoiceFile\1.png", @"C:\ZZ_VoiceFile\2.png");

3、代码帮助类

/// <summary>/// 无损压缩图片/// </summary>/// <param name="sFile">原图片地址</param>/// <param name="dFile">压缩后保存图片地址</param>/// <param name="flag">压缩质量(数字越小压缩率越高)1-100</param>/// <param name="size">压缩后图片的最大大小</param>/// <param name="sfsc">是否是第一次调用</param>/// <returns></returns>public static bool CompressImage(string sFile, string dFile, int flag = 90, int size = 300, bool sfsc = true){Image iSource = Image.FromFile(sFile);ImageFormat tFormat = iSource.RawFormat;//如果是第一次调用,原始图像的大小小于要压缩的大小,则直接复制文件,并且返回trueFileInfo firstFileInfo = new FileInfo(sFile);if (sfsc == true && firstFileInfo.Length < size * 1024){firstFileInfo.CopyTo(dFile);return true;}int dHeight = iSource.Height / 2;int dWidth = iSource.Width / 2;int sW = 0, sH = 0;//按比例缩放Size tem_size = new Size(iSource.Width, iSource.Height);if (tem_size.Width > dHeight || tem_size.Width > dWidth){if ((tem_size.Width * dHeight) > (tem_size.Width * dWidth)){sW = dWidth;sH = (dWidth * tem_size.Height) / tem_size.Width;}else{sH = dHeight;sW = (tem_size.Width * dHeight) / tem_size.Height;}}else{sW = tem_size.Width;sH = tem_size.Height;}Bitmap ob = new Bitmap(dWidth, dHeight);Graphics g = Graphics.FromImage(ob);g.Clear(Color.WhiteSmoke);g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;g.DrawImage(iSource, new Rectangle((dWidth - sW) / 2, (dHeight - sH) / 2, sW, sH), 0, 0, iSource.Width, iSource.Height, GraphicsUnit.Pixel);g.Dispose();//以下代码为保存图片时,设置压缩质量EncoderParameters ep = new EncoderParameters();long[] qy = new long[1];qy[0] = flag;//设置压缩的比例1-100EncoderParameter eParam = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, qy);ep.Param[0] = eParam;try{ImageCodecInfo[] arrayICI = ImageCodecInfo.GetImageEncoders();ImageCodecInfo jpegICIinfo = null;for (int x = 0; x < arrayICI.Length; x++){if (arrayICI[x].FormatDescription.Equals("JPEG")){jpegICIinfo = arrayICI[x];break;}}if (jpegICIinfo != null){ob.Save(dFile, jpegICIinfo, ep);//dFile是压缩后的新路径FileInfo fi = new FileInfo(dFile);if (fi.Length > 1024 * size){flag = flag - 10;CompressImage(sFile, dFile, flag, size, false);}}else{ob.Save(dFile, tFormat);}return true;}catch{return false;}finally{iSource.Dispose();ob.Dispose();}}

原文链接:https://www.cnblogs.com/macT/p/11773327.html

C#编程,无损压缩图片的一种方法相关推荐

  1. java 窗体添加背景图片_Java Swing实现窗体添加背景图片的2种方法详解

    本文实例讲述了java Swing实现窗体添加背景图片的2种方法.分享给大家供大家参考,具体如下: 在美化程序时,常常需要在窗体上添加背景图片.通过搜索和测试,发现了2种有效方式.下面分别介绍. 1. ...

  2. qt设置顶层窗口_QWidget设置窗口背景图片的几种方法

    软件的界面为了更直观或美观,常常需要通过图片来表达.我们知道Qt中所有界面类的祖先是QWidget,因此学会给QWidget设置图片是必须掌握的技能之一.但是编程是没有标准答案的,达到同一效果可以有许 ...

  3. 测试Python下载图片的三种方法

    简 介: 通过Python软件包对网络URL图片链接进行下载,可以加快后期处理.本文测试了urllib, request两个软件包对图片进行下载效果.如果图片原网页有了防止下载机制,是无法下载图片. ...

  4. mac 如何查看anaconda的路径_Mac OS如何直接查看gif图片?分享MAC直接查看gif图片的三种方法...

    想必许多刚入手Mac的用户在浏览GIF图片文件时,会发现Mac不能直接打开GIF,因此有的用户为了方便查看还特意去下载了GIF的图片查看器,其实在Mac中有多种能够直接打开GIF的方法,用户无需任何第 ...

  5. 计算机怎么删除表格,电脑中删除Excel2010表格多余图片的三种方法

    为了让表格看起来更加直观,很多朋友都会在Excel中插入图片.那么,当我们大批量插入图片时,如果想要删除的话,应该怎么办呢?以下是系统城小编为您带来的电脑中删除Excel2010表格多余图片的三种方法 ...

  6. WPS如何转换成图片?三种方法帮你实现

    WPS如何转换成图片?三种方法帮你轻松实现!在大学中,大家完成老师布置的专业课作业都是通过使用电脑中的WPS制作完成.为了防止自己的作业遭到其他同学的私自窜改或是复制粘贴的抄袭.有的同学就会将自己的作 ...

  7. cocos2d-x 改变精灵图片的2种方法

    cocos2d-x 改变精灵图片的2种方法. 1. // 首先载入贴图集 CCSpriteBatchNode *spriteBatch=CCSpriteBatchNode::batchNodeWith ...

  8. 前端下载图片的N种方法

    前几天一个简单的下载图片的需求折腾了我后端大佬好几天,最终还是需要前端来搞,开始说不行的笔者最后又行了,所以趁着这个机会来总结一下下载图片到底有多少种方法. 先起个服务 使用expressjs起个简单 ...

  9. Qt之QWidget设置窗口背景图片的几种方法

    Qt之QWidget设置窗口背景图片的几种方法 几种方法如下: 1.使用调色板QPalette来设置图片 QPalette pal =this->palette(); pal.setBrush( ...

  10. vue样式 引入图片_vue-cli脚手架引入图片的几种方法总结

    我个人常用的方法,一直在摸索更好的方法,如果各位大佬有什么建议,可以给我评论留言哦 1.import方法 第一步:在.vue文件中import edit from 'path'(path是图片与.vu ...

最新文章

  1. 携程CEO称成功来自传统营销 B2C已经过时
  2. Centos 用户组管理
  3. 数人云CEO王璞:容器正成为软件交付的标准
  4. 【Java】 获取当前项目所有的线程
  5. 如何运用DDD - 实体
  6. Python学习笔记之函数(五)
  7. 001Linux课程内容
  8. 轻松实现一个操作ini文件的类
  9. NAT-PT (Network Address Translation-Protocol)网络地址转换协议转换
  10. Python爬取图片时,urllib提示没有属性urlretrieve的问题
  11. Matlab中 regionprops和bwlabel的用法
  12. 移动端字体小于12px的解决方案
  13. axure:原型简单使用
  14. 基于串口通信的摇杆控制器 ---- 摇杆数据的读取、通信协议、从设备解开数据包
  15. 微带滤波器摘要_微带滤波器设计
  16. vue使用百度地图获取位置信息
  17. beatsaber自定义
  18. AWS ELB技术要点
  19. OSI7层网络模型协议精析
  20. excel下拉菜单创建

热门文章

  1. linux scp命令,linux中scp命令和scp命令用法大全
  2. 统一身份认证系统方案
  3. 韩昊20190912-1 每周例行报告
  4. OpenCV 学习笔记-day14 图像几何形状绘制 (rect类 RotatedRect 类,rectangle绘制矩形 circle绘制圆形函数 line画线函数 ellipse画椭圆函数)
  5. 生物信息学biojava|从本地读取并解析遍历genbank文件|从genbank中提取CDS等注释信息
  6. Redis学习篇2_Redis入门基础
  7. 在线IDE开发入门之从零实现一个在线代码编辑器
  8. 计算机程序员的英文简历,电脑程序员个人英文简历范文
  9. matlab画频谱图
  10. 谷歌浏览器控制台使用