1. /// <summary>
  2. /// 无损压缩图片
  3. /// </summary>
  4. /// <param name="sFile">原图片</param>
  5. /// <param name="dFile">压缩后保存位置</param>
  6. /// <param name="dHeight">高度</param>
  7. /// <param name="dWidth"></param>
  8. /// <param name="flag">压缩质量(数字越小压缩率越高) 1-100</param>
  9. /// <returns></returns>
  10. public static bool GetPicThumbnail(string sFile, string dFile, int dHeight, int dWidth, int flag)
  11. {
  12. System.Drawing.Image iSource = System.Drawing.Image.FromFile(sFile);
  13. ImageFormat tFormat = iSource.RawFormat;
  14. int sW = 0, sH = 0;
  15. //按比例缩放
  16. Size tem_size = new Size(iSource.Width, iSource.Height);
  17. if (tem_size.Width > dHeight || tem_size.Width > dWidth) //将**改成c#中的或者操作符号
  18. {
  19. if ((tem_size.Width * dHeight) > (tem_size.Height * dWidth))
  20. {
  21. sW = dWidth;
  22. sH = (dWidth * tem_size.Height) / tem_size.Width;
  23. }
  24. else
  25. {
  26. sH = dHeight;
  27. sW = (tem_size.Width * dHeight) / tem_size.Height;
  28. }
  29. }
  30. else
  31. {
  32. sW = tem_size.Width;
  33. sH = tem_size.Height;
  34. }
  35. Bitmap ob = new Bitmap(dWidth, dHeight);
  36. Graphics g = Graphics.FromImage(ob);
  37. g.Clear(Color.WhiteSmoke);
  38. g.CompositingQuality = CompositingQuality.HighQuality;
  39. g.SmoothingMode = SmoothingMode.HighQuality;
  40. g.InterpolationMode = InterpolationMode.HighQualityBicubic;
  41. g.DrawImage(iSource, new Rectangle((dWidth - sW) / 2, (dHeight - sH) / 2, sW, sH), 0, 0, iSource.Width, iSource.Height, GraphicsUnit.Pixel);
  42. g.Dispose();
  43. //以下代码为保存图片时,设置压缩质量
  44. EncoderParameters ep = new EncoderParameters();
  45. long[] qy = new long[1];
  46. qy[0] = flag;//设置压缩的比例1-100
  47. EncoderParameter eParam = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, qy);
  48. ep.Param[0] = eParam;
  49. try
  50. {
  51. ImageCodecInfo[] arrayICI = ImageCodecInfo.GetImageEncoders();
  52. ImageCodecInfo jpegICIinfo = null;
  53. for (int x = 0; x < arrayICI.Length; x++)
  54. {
  55. if (arrayICI[x].FormatDescription.Equals("JPEG"))
  56. {
  57. jpegICIinfo = arrayICI[x];
  58. break;
  59. }
  60. }
  61. if (jpegICIinfo != null)
  62. {
  63. ob.Save(dFile, jpegICIinfo, ep);//dFile是压缩后的新路径
  64. }
  65. else
  66. {
  67. ob.Save(dFile, tFormat);
  68. }
  69. return true;
  70. }
  71. catch
  72. {
  73. return false;
  74. }
  75. finally
  76. {
  77. iSource.Dispose();
  78. ob.Dispose();
  79. }
  80. }

c# 无损高质量压缩图片代码的更多相关文章

  1. 利用反射快速给Model实体赋值 使用 Task 简化异步编程 Guid ToString 格式知多少?(GUID 格式) Parallel Programming-实现并行操作的流水线(生产者、消费者) c# 无损高质量压缩图片代码 8种主要排序算法的C#实现 (一) 8种主要排序算法的C#实现 (二)

    试想这样一个业务需求:有一张合同表,由于合同涉及内容比较多所以此表比较庞大,大概有120多个字段.现在合同每一次变更时都需要对合同原始信息进行归档一次,版本号依次递增.那么我们就要新建一张合同历史表, ...

  2. c#无损高质量压缩图片

    这几天在做同城交友网www.niyuewo.com时遇到的一个问题,如何将会员的头像压缩,在网上搜索整理如下:在此也感谢医药精(www.yiyaojing.com)站长的帮忙 /// <summ ...

  3. 移动Web—CSS为Retina屏幕替换更高质量的图片

    来源:互联网 作者:佚名 时间:12-24 10:37:45 [大 中 小] 点评:Retian似乎是屏幕显示的一种趋势,这也是Web设计师面对的一个新挑战;移动应用程序的设计师们已经学会了如何为Re ...

  4. 编程精粹--编写高质量C语言代码(3):自己设计并使用断言(二)

    接着上一遍文章<<编程精粹--编写高质量C语言代码(2):自己设计并使用断言(一)>>,继续学习怎样自己设计并使用断言,来更加easy,更加不费力地自己主动寻找出程序中的错误. ...

  5. HTML Inspector – 帮助你编写高质量的 HTML 代码

    HTML Inspector 是一款代码质量检测工具,帮助你编写更优秀的 HTML 代码.HTML Inspector 使用 JavaScript 编写,运行在浏览器中,是最好的 HTML 代码检测工 ...

  6. iOS应用开发最佳实践系列一:编写高质量的Objective-C代码

          本文由海水的味道编译整理,转载请注明译者和出处,请勿用于商业用途! 点标记语法 属性和幂等方法(多次调用和一次调用返回的结果相同)使用点标记语法访问,其他的情况使用方括号标记语法. 良好的 ...

  7. 高质量的javascript代码 -- 深入理解Javascript

    一. 编写高质量的javascript代码基本要点a) 可维护的代码(Writing Maintainable Code)i. 可读(注释)ii. 一致(看上去是同一个人写的)iii. 已记录b) 最 ...

  8. 老司机告诉你高质量的Java代码是怎么练成的?

    一提起程序员,首先想到的一定是"码农",对,我们是高产量的优质"码农",我们拥有超跃常人的逻辑思维以及不走寻常路的分析.判别能力,当然,我们也有良好的编码规范, ...

  9. 使用 FFmpeg 处理高质量 GIF 图片

    使用 FFmpeg 处理高质量 GIF 图片 - 为程序员服务  http://ju.outofmemory.cn/entry/169845

随机推荐

  1. Wooden Sticks

    Wooden Sticks Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) Total ...

  2. 重构if...else...或者switch程序块 为 中介者(Mediator)模式.的思考

    http://www.cnblogs.com/insus/p/4142264.html 重构if...else...或者switch程序块 为 中介者(Mediator)模式.的思考 首先普世的编程架 ...

  3. 使用thinkPHP实现数据更新一例【原创】

    在上一篇文章中我们实现了数据的删除和批量删除,这一篇文章我们将实现数据的更新. 首先依然是预期效果图: 点击修改后进入modi.html页面,然后进行修改,如此处修改了真实姓名这一属性: 点击保存: ...

  4. remastersys修改默认选项

    1.vim /etc/remastersys/isolinux/isolinux.cfg.vesamenu default vesamenu.c32prompt 0timeout 100 menu t ...

  5. 排序算法THREE:归并排序MergeSort

    /** *归并排序思路:分治法思想 O(nlogn) * 把数组一分为二,二分为四 * 四和为二,二和为一 * */ /** * 归并排序主方法 *@params 待排序的数组 *@params 初始 ...

  6. 我爱工程化 之 gulp 使用(一)

    一.简介 gulp是前端自动化工具,压缩.合并.预编译检查等等,它与grunt频繁IO操作来消耗内存相比,它是使用的流的方式,我们可以简称为管道流(一端入,一端出,3通水,一个大桶,第一通在管道里面流 ...

  7. Centos系统mysql 忘记root用户的密码

    Centos系统mysql 忘记root用户的密码: 第一步:(停掉正在运行的mysql) [root@maomao ~]# /etc/init.d/mysqld stop Stopping MySQ ...

  8. Intellij IDEA 14的注册码

    IntelliJ IDEA 14 注册码 IntelliJ IDEA 14 下载地址: IntelliJ IDEA 14 下载 分享几个license: (1) key:IDEA value:6115 ...

  9. CentOS安装SetupTools(easy_install)

    确保Py版本在2.6或以上 (旧版本需升级或参考旧版本安装) cd /opt wget https://pypi.python.org/packages/source/s/setuptools/set ...

  10. 《编写高质量代码:改善Python程序的91个建议》读后感

    编写高质量代码:改善Python程序的91个建议  http://book.douban.com/subject/25910544/ 1.(建议16)is 用于判断两个对象的id是否相等,==才是判断 ...