C#实现图片的无损压缩
/// <summary>
/// 圖像縮略圖處理
/// </summary>
/// <param name="bytes">圖像源數據</param>
/// <param name="compression">壓縮質量 1-100</param>
/// <param name="thumbWidth">縮略圖的寬</param>
/// <param name="thumbHeight">縮略圖的高</param>
/// <returns></returns>
public static byte[] ConvertToThumbnail(byte[] bytes, int compression = 100, int thumbWidth = 0, int thumbHeight = 0)
{
byte[] bs = null;
try
{
if (bytes != null)
{
using (MemoryStream ms = new MemoryStream(bytes))
{
using (Bitmap srcimg = new Bitmap(ms))
{
if (thumbWidth == 0 && thumbHeight == 0)
{
thumbWidth = srcimg.Width;
thumbHeight = srcimg.Height;
}
using (Bitmap dstimg = new Bitmap(thumbWidth, thumbHeight))//圖片壓縮質量
{
//從Bitmap創(chuàng)建一個System.Drawing.Graphics對象,用來繪制高質量的縮小圖。
using (Graphics gr = Graphics.FromImage(dstimg))
{
//把原始圖像繪制成上面所設置寬高的縮小圖
Rectangle rectDestination = new Rectangle(0, 0, thumbWidth, thumbHeight);
gr.Clear(Color.WhiteSmoke);
gr.CompositingQuality = CompositingQuality.HighQuality;
gr.SmoothingMode = SmoothingMode.HighQuality;
gr.InterpolationMode = InterpolationMode.HighQualityBicubic;
gr.DrawImage(srcimg, rectDestination, 0, 0, srcimg.Width, srcimg.Height, GraphicsUnit.Pixel);
EncoderParameters ep = new EncoderParameters(1);
ep.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, compression);//設置壓縮的比例1-100
ImageCodecInfo[] arrayICI = ImageCodecInfo.GetImageEncoders();
ImageCodecInfo jpegICIinfo = arrayICI.FirstOrDefault(t => t.FormatID == System.Drawing.Imaging.ImageFormat.Png.Guid);
using (MemoryStream dstms = new MemoryStream())
{
if (jpegICIinfo != null)
{
dstimg.Save(dstms, jpegICIinfo, ep);
}
else
{
dstimg.Save(dstms, System.Drawing.Imaging.ImageFormat.Png);//保存到內存里
}
bs = new Byte[dstms.Length];
dstms.Position = 0;
dstms.Read(bs, 0, bs.Length);
}
}
}
}
}
}
}
catch (Exception ex)
{
LogManager.DefaultLogger.Error(LogConvert.ParseWebEx(ex), string.Concat("ConvertToThumbnail error.", thumbWidth, " ", thumbHeight));
}
return bs;
}
總結
以上是生活随笔為你收集整理的C#实现图片的无损压缩的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: sql server常用性能计数器
- 下一篇: 如何在没有安装微软Excel环境下操作E