注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

More Than Programmer

do more and more,beyond programmer... ..

 
 
 

日志

 
 
关于我

每天进步一点,让自己活得充实!

网易考拉推荐
 
 

C# 批量压缩图片(转载以收藏)  

2009-03-06 15:34:01|  分类: C# |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

http://www.nocoo.us/2008/08/csharp-jpg-compact/ 著作权归原作者所有

 

程序员懒吧?呵呵。
只要能找到一个好用的,我是绝对不会自己写一个出来的。因为WordPress的图库插件NextGEN Gallery破算法不能压缩太大的文件,PHP执行内存不足,同样的照片跑在同一环境下的Gallery2处理起来很轻松,还能一下执行N张呢…
没办法只好先把照片压缩下在传上去了。找个好几个批量压缩软件都不如意,没办法只好自己写一个了。

界面是这样子的:

NocooJPGCompact.png

核心算法其实非常简单:

view sourceprint?

01.using System;   02.using System.Collections.Generic;   03.using System.ComponentModel;   04.using System.Data;   05.using System.Drawing;   06.using System.Text;   07.using System.Windows.Forms;   08.using System.Drawing.Imaging;   09.using System.IO;   10.   11.namespace JPGCompact   12.{   13. public partial class MainForm : Form   14. {   15. /// <summary>   16. /// 保存JPG时用   17. /// </summary>   18. /// <param name="mimeType">文件类型</param>   19. /// <returns>得到指定mimeType的ImageCodecInfo</returns>   20. private static ImageCodecInfo GetCodecInfo(string mimeType)   21. {   22. ImageCodecInfo[] CodecInfo = ImageCodecInfo.GetImageEncoders();   23. foreach (ImageCodecInfo ici in CodecInfo)   24. {   25. if (ici.MimeType == mimeType) return ici;   26. }   27. return null;   28. }   29.   30. /// <summary>   31. /// 保存为JPEG格式,支持压缩质量选项   32. /// </summary>   33. /// <param name="bmp">原始位图</param>   34. /// <param name="FileName">新文件地址</param>   35. /// <param name="Qty">压缩质量,越大越好,文件也越大(0-100)</param>   36. /// <returns>成功标志</returns>   37. public static bool SaveAsJPEG(Bitmap bmp, string FileName, int Qty)   38. {   39. try  40. {   41. EncoderParameter p;   42. EncoderParameters ps;   43. ps = new EncoderParameters(1);   44. p = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, Qty);   45. ps.Param[0] = p;   46. bmp.Save(FileName, GetCodecInfo("image/jpeg"), ps);   47. return true;   48. }   49. catch  50. {   51. return false;   52. }   53. }   54.   55. private bool CompressPicture(string sourcePath, string targetPath)   56. {   57. try  58. {   59. // 大小比率   60. double sizeRate = double.Parse(cbSizeRate.Text) / 100;   61. // 品质比率   62. int qualityRate = int.Parse(cbQualityRate.Text);   63.   64. Image sourceImage = Image.FromFile(sourcePath);   65. // 调整图片大小   66. Bitmap bmp = new Bitmap(   67. sourceImage,   68. new Size(   69. (int)(sourceImage.Width * sizeRate),   70. (int)(sourceImage.Height * sizeRate)));   71. // 压缩图片   72. SaveAsJPEG(bmp, targetPath, qualityRate);   73.   74. GC.Collect();   75.   76. return true;   77. }   78. catch  79. {   80. return false;   81. }   82. }   83. }   84.}

比较有技术含量的是那个Exif信息的读取,一会儿我写一篇说说那个怎么做。

  评论这张
 
阅读(1658)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017