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

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

  

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

  1. c# 无损高质量压缩图片代码

    /// <summary> /// 无损压缩图片 /// </summary> /// <param name="sFile">原图片</ ...

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

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

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

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

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

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

  5. C#剪切生成高质量缩放图片

    /// <summary> /// 高质量缩放图片 /// </summary> /// <param name="OriginFilePath"&g ...

  6. java高质量缩放图片

    可按照比例缩放,也可以指定宽高 import com.sun.image.codec.jpeg.JPEGImageEncoder; import com.sun.image.codec.jpeg.JP ...

  7. C# GDI生成清晰【高质量】图片

    对于GDI+,在正常的操作,Bitmap,Graphcis,DrawImage或者DrawString ,生成图片的话,会产生很多杂点,或者是图片质量不稳定.尤其是在读取图片后,生成缩略图之后,文件会 ...

  8. C#压缩图片——高质量压缩方式

    传入Bitmap对象,以及新图片的长宽(Bitmap.Size),这样生成的就是跟原图尺寸一致的低质量图片 public Bitmap GetImageThumb(Bitmap mg, Size ne ...

  9. C# .net 高清压缩图片 合并图片方法

    /// <summary> /// 合并宽度一样的图片 /// </summary> /// <param name="imgUrls">多张图 ...

随机推荐

  1. oracle 体系结构解析

    三.oracle 体系结构 1.oracle内存由SGA+PGA所构成 2.oracle数据库体系结构数据库的体系结构是指数据库的组成.工作过程与原理,以及数据在数据库中的组织与管理机制. oracl ...

  2. xargs 简单功能

    之所以能用到这个命令,关键是由于很多命令不支持|管道来传递参数,而日常工作中有有这个必要,所以就有了xargs命令,例如: find /sbin -perm +700 |ls -l       这个命 ...

  3. 转载-SQL中的where条件,在数据库中提取与应用浅析

    1        问题描述 一条SQL,在数据库中是如何执行的呢?相信很多人都会对这个问题比较感兴趣.当然,要完整描述一条SQL在数据库中的生命周期,这是一个非常巨大的问题,涵盖了SQL的词法解析.语 ...

  4. JavaScript 链式结构序列化详解

    一.概述 在JavaScript中,链式模式代码,太多太多,如下: if_else: if(...){ //TODO }else if(...){ //TODO }else{ //TODO } swi ...

  5. jbpm4.4+ssh配置(有些使用经验很好)

    http://www.cnblogs.com/cmzcheng/archive/2011/11/20/2255806.html ———————————————————————————————————— ...

  6. 微软IOC容器Unity简单代码示例2-配置文件方式

    @(编程) 1. 通过Nuget下载Unity 这个就不介绍了 2. 接口代码 namespace UnityDemo { interface ILogIn { void Login(); } } n ...

  7. keil编译时出现*** WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNAL

    *** WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNAL *** WARNING L1: UNRESOLVED EXTERNAL SYMBOL 解决: ...

  8. tryparse的用法,^0*[1-9]\d*$

    Entry entry = new Entry(); Int32 iParam; if(Int32.TryParse(entry.ajh,out iParam)) { /*如果转换成功就输出iPara ...

  9. UVaLive 6693 Flow Game (计算几何,线段相交)

    题意:给个棋盘,你可以在棋盘的边缘处放2个蓝色棋子2个黄色棋子,问连接2组同色棋子的最小代价,如果线路交叉,输-1. 析:交叉么,可以把它们看成是两条线段,然后如果相交就是不行的,但是有几种特殊情况, ...

  10. http://docwiki.embarcadero.com/RADStudio/XE7/en/Delphi_Data_Types

    http://docwiki.embarcadero.com/RADStudio/XE7/en/Delphi_Data_Types