????????/// <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;
? ? ? ? }