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. 软件测试之 LoadRunner安装\破解\汉化

    一.下载 LoadRunner下载地址:http://kuai.xunlei.com/d/QRNIUASALOIE 二. 安装 1.启动安装程序 运行setup.exe,点击“LoadRunner完整 ...

  2. 用VirtualBox构建MySQL测试环境笔记

    网络环境: 宿主机:Win7 VirtualBox 4.1.4 + Ubuntu 11.10 server 64bit 宿主机使用网线的时候,客户机在Bridged Adapter模式下,使用Athe ...

  3. memcached一些整理

        .NET中使用Memcached的相关资源整理   Memcached官方站点:http://www.danga.com/memcached/ Memcached Win32 1.2.6下载: ...

  4. (转)HTTP协议(2)

    转自:http://kb.cnblogs.com/page/130970/  作者 :小坦克 当今web程序的开发技术真是百家争鸣,ASP.NET, PHP, JSP,Perl, AJAX 等等. 无 ...

  5. CentOS6.4 安装JDK

    1.下载JDK,这里用的是jdk-7u65-linux-x64.tar.gz,请到官网上下载. 2.清除默认的JDK,yum remove java 3.解压文件 tar -xzf jdk-7u65- ...

  6. PHP提取身份证号码中的生日并验证是否成年的函数

    php 提取身份证号码中的生日日期以及确定是否成年的一个函数.可以同时确定15位和18位的身份证,经本人亲测,非常好用,分享函数代码如下: <?php //用php从身份证中提取生日,包括15位 ...

  7. 使用ajaxFileUpload实现异步上传图片

    index.html <head runat="server"> <title></title> <script src="jq ...

  8. canvas使用注意点

    1.canvas中文教程https://developer.mozilla.org/zh-CN/docs/Canvas_tutorial 2.canvas默认宽高是300.150,为避免异常,最好使用 ...

  9. LCD显示方向

    一.ILI9341内存到显示地址的映射 本文只讨论“正常显示”,不讨论“垂直滚动显示”模式. 可以看到物理内存被两个指针访问,行指针和列指针,行指针范围从000h到013Fh,列指针范围为0000h到 ...

  10. JavaScript trim 实现(去除字符串首尾指定字符)

    String.prototype.trim = function (char, type) { if (char) { if (type == 'left') { return this.replac ...