/// <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創建一個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; }