声明:

图片压缩算法,不建议对小图片进行压缩,一般文件小于1m的,真心没必要压缩,

图片很小的,例如:几百KB的图片,有可能不会减少图片体积,反而压缩后更大,也很正常,

请大家合理使用,并不是,所有图片,越压缩越好!!!!!

上面是我对2M多的图片进行了测试,压缩质量设置了50,压缩到了800KB,放大和缩小和原图,几乎没有什么区别。

代码如下:

  1. private void button3_Click(object sender, EventArgs e)
  2. {
  3. using (OpenFileDialog ofd = new OpenFileDialog())
  4. {
  5. ofd.Filter = "图片|*.jpg;*.png;*.gif;*.jpeg;*.bmp";
  6. if (ofd.ShowDialog() == DialogResult.OK)
  7. {
  8. using (FileStream file = new FileStream(ofd.FileName, FileMode.Open))
  9. {
  10. var img = CompressionImage(file, 50L);
  11. MessageBox.Show(CreateImageFromBytes(AppDomain.CurrentDomain.BaseDirectory + @"\" + Guid.NewGuid().ToString(), img));
  12. }
  13.  
  14. }
  15. }
  16. }
  17.  
  18. /// <summary>
  19. /// Convert Byte[] to Image
  20. /// </summary>
  21. /// <param name="buffer"></param>
  22. /// <returns></returns>
  23. public static Image BytesToImage(byte[] buffer)
  24. {
  25. MemoryStream ms = new MemoryStream(buffer);
  26. Image image = System.Drawing.Image.FromStream(ms);
  27. return image;
  28. }
  29.  
  30. /// <summary>
  31. /// Convert Byte[] to a picture and Store it in file
  32. /// </summary>
  33. /// <param name="fileName"></param>
  34. /// <param name="buffer"></param>
  35. /// <returns></returns>
  36. public static string CreateImageFromBytes(string fileName, byte[] buffer)
  37. {
  38. string file = fileName;
  39. Image image = BytesToImage(buffer);
  40. ImageFormat format = image.RawFormat;
  41. if (format.Equals(ImageFormat.Jpeg))
  42. {
  43. file += ".jpeg";
  44. }
  45. else if (format.Equals(ImageFormat.Png))
  46. {
  47. file += ".png";
  48. }
  49. else if (format.Equals(ImageFormat.Bmp))
  50. {
  51. file += ".bmp";
  52. }
  53. else if (format.Equals(ImageFormat.Gif))
  54. {
  55. file += ".gif";
  56. }
  57. else if (format.Equals(ImageFormat.Icon))
  58. {
  59. file += ".icon";
  60. }
  61. System.IO.FileInfo info = new System.IO.FileInfo(file);
  62. System.IO.Directory.CreateDirectory(info.Directory.FullName);
  63. File.WriteAllBytes(file, buffer);
  64. return file;
  65. }
  66. /// <summary>
  67. /// 壓縮圖片 /// </summary>
  68. /// <param name="fileStream">圖片流</param>
  69. /// <param name="quality">壓縮質量0-100之間 數值越大質量越高</param>
  70. /// <returns></returns>
  71. private byte[] CompressionImage(Stream fileStream, long quality)
  72. {
  73. using (System.Drawing.Image img = System.Drawing.Image.FromStream(fileStream))
  74. {
  75. using (Bitmap bitmap = new Bitmap(img))
  76. {
  77. ImageCodecInfo CodecInfo = GetEncoder(img.RawFormat);
  78. System.Drawing.Imaging.Encoder myEncoder = System.Drawing.Imaging.Encoder.Quality;
  79. EncoderParameters myEncoderParameters = new EncoderParameters();
  80. EncoderParameter myEncoderParameter = new EncoderParameter(myEncoder, quality);
  81. myEncoderParameters.Param[] = myEncoderParameter;
  82. using (MemoryStream ms = new MemoryStream())
  83. {
  84. bitmap.Save(ms, CodecInfo, myEncoderParameters);
  85. myEncoderParameters.Dispose();
  86. myEncoderParameter.Dispose();
  87. return ms.ToArray();
  88. }
  89. }
  90. }
  91. }
  92.  
  93. private static ImageCodecInfo GetEncoder(ImageFormat format)
  94. {
  95. ImageCodecInfo[] codecs = ImageCodecInfo.GetImageDecoders();
  96. foreach (ImageCodecInfo codec in codecs)
  97. {
  98. if (codec.FormatID == format.Guid)
  99. { return codec; }
  100. }
  101. return null;
  102. }

C# 大图片压缩算法,减少图片体积的更多相关文章

  1. WebP 在减少图片体积和流量上的效果如何?MIP技术实践分享

    作者 | Jackson 编辑 | 尾尾 不论是 PC 还是移动端,图片一直占据着页面流量的大头,在图片的大小和质量之间如何权衡,成为了长期困扰开发者们的问题.而 WebP 技术的出现,为解决该问题提 ...

  2. BMCP位图图片压缩算法

    什么是位图?位图也称像素图像或点阵图像,是由多个点组成的,这些点被称为像素.位图可以模仿照片的真实效果,具有表现力强.细腻.层次多和细节多等优点. 图片的压缩格式:在Windows系统中,我们常见的b ...

  3. js 压缩图片(只缩小体积,不更改图片尺寸)

      1.情景展示 如上图所示,点击上传图片按钮,调用手机摄像头拍照功能. <input onchange="javascript:imgFun.uploadPicture();&quo ...

  4. 谷歌开源图片压缩算法Guetzli实测体验报告

    谷歌大神又出开源新技术啦,这次是对JPEG格式的图片采用全新算法重新编码,输出的图片还是JPEG但是图片大小明显缩小,而质量不但没有损失,甚至还更加优化,速速来体验一把. 一.环境安装 下载谷歌开源软 ...

  5. 启用lazyload插件,减少图片加载

    使用lazyload的js插件,减少图片加载,提高页面加载速度和节省流量.虽然这个头像是第三方服务器来的,不消费博客的流量,但是能节省部分访客的加载时间,也是不错的哦. 用lazyload插件,只是后 ...

  6. java 压缩图片(只缩小体积,不更改图片尺寸)

      1.情景展示 在调用腾讯身份证OCR接口的时候,由于要求图片大小只能限制在1MB以内,这样,就必须使用到图片压缩技术 2.代码展示 /** * 图片处理工具类 * @explain * @auth ...

  7. iOS 图片大小压缩 图片尺寸处理

    图片的压缩其实是俩概念,1.是 “压” 文件体积变小,但是像素数不变,长宽尺寸不变,那么质量可能下降,2.是 “缩” 文件的尺寸变小,也就是像素数减少.长宽尺寸变小,文件体积同样会减小. 这个 UII ...

  8. iOS 使用AFN 进行单图和多图上传 摄像头/相册获取图片,压缩图片

    图片上传时必要将图片进行压缩,不然会上传失败 首先是同系统相册选择图片和视频.iOS系统自带有UIImagePickerController,可以选择或拍摄图片视频,但是最大的问题是只支持单选,由于项 ...

  9. 前端性能优化之优化图片 && 优化显示图片

    前端图片优化一直以来都是热门话题,从需求上来看,很多站点往往是图片体积大于代码体积, 图片请求多余代码文件请求, 给前端的性能带来了很大的困扰,那么应该如何解决呢? 零. 认识图片 我们通常使用的图片 ...

随机推荐

  1. Quo JS多种触摸手势轻量级JavaScript库

    http://www.uedsc.com/quo-js.html http://quojs.tapquo.com/

  2. C#数组 添加元素

    例1: string[] a = new string[] { "1", "2", "3" }; 给a追加一个 "4" ...

  3. EXCEL行倒叙

  4. RGB与CMYK以及加色与减色

    转载自:http://blog.csdn.net/tohmin/article/details/4761930 黑白色配色与RGB.CMYK 1. 光学三原色与印刷三原色 光学与印刷三原色, 相信大家 ...

  5. C# 裁剪图片

    /// <summary> /// 生成缩略图 /// </summary> /// <param name="originalImagePath"& ...

  6. PHP中路径的相关配置

    1. get_include_path() 取得当前的环境变量,即php.ini里设置的 include_path; set_include_path() 是设置include的路径,通过此设置后可以 ...

  7. C# if为false仍然进入方法体,==和qeual结果不一致

    场景: 代码: if( e.Key == Key.Tab) { // ... } 断点调试:结果为false,进入方法体   ??? 更改为: if(Key.Tab.Equals(e.key)) { ...

  8. Android——SQLite数据库(二)升级数据库、增、删、改、查、事务

    xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android= ...

  9. Kettle 添加对应hadoop版本的支持

    在hdp的官网上有一个ETL工具叫做Talend Open Studio,然后我就下了,并且在群里询问了一下,突然间冒出来一群ETL高手,经高人指点认识了一款叫做Kettle的软件,经过这两天的试用, ...

  10. update更新另一个字段

    1. 写法轻松,更新效率高:update table1 set field1=table2.field1,field2=table2.field2from table2where table1.id= ...