C#实现图片压缩方法
来源:互联网 发布:怎样利用网络赚钱 编辑:程序博客网 时间:2024/06/05 04:36
原文地址:http://www.cnblogs.com/lifeil/archive/2013/02/25/2931683.html
一般在web应用中,对客户端提交上来的图片肯定需要进行压缩的。尤其是比较大的图片,如果不经过压缩会导致页面变的很大,打开速度比较慢,当然了如果是需要高质量的图片也得需要生产缩略图。
下面贴出我自己琢磨的图片压缩算法,首先这个是未经优化的简单实现:
public static System.Drawing.Image GetImageThumb(System.Drawing.Image sourceImg, int width, int height) { System.Drawing.Image targetImg = new System.Drawing.Bitmap(width, height); using (System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(targetImg)) { g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High; g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic; g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality; g.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.HighQuality; g.DrawImage(sourceImg, new System.Drawing.Rectangle(0, 0, width, height), new System.Drawing.Rectangle(0, 0, sourceImg.Width, sourceImg.Height), System.Drawing.GraphicsUnit.Pixel); g.Dispose(); } return targetImg; }
这个方法比较简单,用到的是高质量压缩。经过这个方法压缩后,200K的图片只能压缩到160k左右。经过改写代码实现了如下的方法:
public Bitmap GetImageThumb(Bitmap mg, Size newSize) { double ratio = 0d; double myThumbWidth = 0d; double myThumbHeight = 0d; int x = 0; int y = 0; Bitmap bp; if ((mg.Width / Convert.ToDouble(newSize.Width)) > (mg.Height / Convert.ToDouble(newSize.Height))) ratio = Convert.ToDouble(mg.Width) / Convert.ToDouble(newSize.Width); else ratio = Convert.ToDouble(mg.Height) / Convert.ToDouble(newSize.Height); myThumbHeight = Math.Ceiling(mg.Height / ratio); myThumbWidth = Math.Ceiling(mg.Width / ratio); Size thumbSize = new Size((int)newSize.Width, (int)newSize.Height); bp = new Bitmap(newSize.Width, newSize.Height); x = (newSize.Width - thumbSize.Width) / 2; y = (newSize.Height - thumbSize.Height); System.Drawing.Graphics g = Graphics.FromImage(bp); g.SmoothingMode = SmoothingMode.HighQuality; g.InterpolationMode = InterpolationMode.HighQualityBicubic; g.PixelOffsetMode = PixelOffsetMode.HighQuality; Rectangle rect = new Rectangle(x, y, thumbSize.Width, thumbSize.Height); g.DrawImage(mg, rect, 0, 0, mg.Width, mg.Height, GraphicsUnit.Pixel); return bp; }
这样实现的压缩使压缩率大幅度上升。其实代码并没有变多少,最主要的是在保存的时候要是用jpg格式,如果不指定格式,默认使用的是png格式。
下面这个是园友写的根据设置图片质量数值来压缩图片的方法:
public static bool GetPicThumbnail(string sFile, string outPath, int flag) { System.Drawing.Image iSource = System.Drawing.Image.FromFile(sFile); ImageFormat tFormat = iSource.RawFormat; //以下代码为保存图片时,设置压缩质量 EncoderParameters ep = new EncoderParameters(); long[] qy = new long[1]; qy[0] = flag;//设置压缩的比例1-100 EncoderParameter eParam = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, qy); ep.Param[0] = eParam; try { ImageCodecInfo[] arrayICI = ImageCodecInfo.GetImageEncoders(); ImageCodecInfo jpegICIinfo = null; for (int x = 0; x < arrayICI.Length; x++) { if (arrayICI[x].FormatDescription.Equals("JPEG")) { jpegICIinfo = arrayICI[x]; break; } } if (jpegICIinfo != null) { iSource.Save(outPath, jpegICIinfo, ep);//dFile是压缩后的新路径 } else { iSource.Save(outPath, tFormat); } return true; } catch { return false; } finally { iSource.Dispose(); iSource.Dispose(); } }
转载请注明来源:http://www.cnblogs.com/lifeil/archive/2013/02/25/2931683.html
<script type="text/javascript"><!--google_ad_client = "ca-pub-1944176156128447";/* cnblogs 首页横幅 */google_ad_slot = "5419468456";google_ad_width = 728;google_ad_height = 90;//--></script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
- C#实现图片压缩方法
- C#图片压缩的实现方法
- C#图片压缩的实现方法
- C#实现图片压缩
- c#实现图片压缩
- C#图片截取压缩(百分比压缩/大小压缩)实现代码
- C#图片截取压缩(百分比压缩/大小压缩)实现代码
- C#图片截取压缩(百分比压缩/大小压缩)实现代码
- VB.Net实现图片压缩的方法
- java实现压缩图片的方法
- C#实现压缩HTML代码的方法
- C# JPG图片压缩
- C# 压缩图片
- C#图片压缩算法
- C#图片无损压缩
- C#压缩图片
- C#压缩图片算法
- C#图片压缩处理
- 固定顶部导航栏完整解决方案
- 关于10053 trace中的UNCOMPBKTS和ENDPTVALS
- Queue is not empty
- 一口一口吃掉struts(七)——ActionForward知多少
- Objective-C--欧几里得算法
- C#实现图片压缩方法
- 黑马程序员_泛型
- 【发布软件】Visual Studio工具:自动递增版本号
- Oracle CBO术语大集合
- linux下安装rtx
- 给Oracle年轻的初学者的几点建议
- Hyper-V Centos Linux Integration Services
- 作图工具
- 获得文件上传路径,下载路径。