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. 九度OJ 1533 最长上升子序列 -- 动态规划

    题目地址:http://ac.jobdu.com/problem.php?pid=1533 题目描述: 给定一个整型数组, 求这个数组的最长严格递增子序列的长度. 譬如序列1 2 2 4 3 的最长严 ...

  2. phpstudy 下开启openssl

    1.在php.ini里面的extension=php_openssl.dll是开启的状态,没有被注释. 2.里面的allow_url_fopen = On表示开启了. 3.如果你是Windows 64 ...

  3. .net Remoting 的工作原理是什么?

    webservice和.net remoting都是用来通信的框架,它们最大的优点是可以像调用本地对象一样调用远程对象 区别:1.webservice是用的应用层协议http封装的,所以它可以被很多其 ...

  4. MongoDB入门三步曲2--基本操作(续)--聚合、索引、游标及mapReduce

    mongodb 基本操作(续)--聚合.索引.游标及mapReduce 目录 聚合操作 MapReduce 游标 索引 聚合操作 像大多关系数据库一样,Mongodb也提供了聚合操作,这里仅列取常见到 ...

  5. Python环境搭建(windows)

    Python环境搭建(windows) Python简介 Python(英国发音:/ˈpaɪθən/ 美国发音:/ˈpaɪθɑːn/),是一种面向对象.直译式计算机编程语言,具有近二十年的发展历史,成 ...

  6. dvd的舞女

    [题目描述] 众所周知,dvd是一个爱做梦的好孩子. 但是不知道为什么最近dvd总是梦到一群舞女 众所周知,dvd是一个爱琢磨的好孩子. 但是不知道为什么dvd最近一直想不明白为什么 终于dvd发现了 ...

  7. UIMenuController搭配UIPasteboard,执行拷贝-黏贴操作-b

    一.基本概念 UIKit框架中,可以直接执行拷贝黏贴操作的有:UITextView.UITextField和UIWebView,其他控件需要实现相关方法. 关于UIPasteboard ·黏贴板是ap ...

  8. mongodb Install the MongoDB service

    在用到mongodb时,首先要运行mongod.exe以启动mongo,这样就会出现命令框( command prompt),为了避免出现这种情况.要以服务的形式来启动mongo,这样就不会出现命令框 ...

  9. Java 代码优化过程的实例介绍

    衡量程序的标准 衡量一个程序是否优质,可以从多个角度进行分析.其中,最常见的衡量标准是程序的时间复杂度.空间复杂度,以及代码的可读性.可扩展性.针对程序的时间复杂度和空间复杂度,想要优化程序代码,需要 ...

  10. CentOS挂载新硬盘

    1.查看当前硬盘使用状况: df -h root@VM_160_34_centos:~> df -h Filesystem Size Used Avail Use% Mounted on /de ...