/// <summary> /// 获取缩略图片 /// 指定当目标缩略图大于原图时 不处理 /// </summary> /// <param name="original_image">原图</param> /// <param name="titCase">缩图方式</param> /// <param name="target_width">指定目标缩略图的宽度</param> /// <param name="target_height">指定目标缩略图的高度</param> /// <returns></returns> public static Bitmap GetThumbnailImage(Image original_image, ThumbnailImageType titCase, int target_width, int target_height) { //原图高宽 int origin_width = original_image.Width, origin_height = original_image.Height; float orignRatio = (float)origin_width / (float)origin_height; //原图 宽高 比例 int new_width = target_width, new_height = target_height; //新图片 宽高 float target_ratio = (float)target_width / (float)target_height; //缩略图生成方式 switch (titCase) { //缩放全图到正确比例 case ThumbnailImageType.Zoom: { #region 缩图比例 if (target_width > 0 && target_height <= 0) //只有宽 { new_height = (int)Math.Floor((float)target_width / orignRatio); //只有高 } else if (target_height > 0 && target_width <= 0) { new_width = (int)Math.Floor((float)target_height * orignRatio); } else if (target_width > 0 && target_height > 0) //宽高同时限制 { if (orignRatio > 1) //宽>高 { new_height = (int)Math.Floor((float)target_width / orignRatio); //只有高 } else { new_width = (int)Math.Floor((float)target_height * orignRatio); } } #endregion } break; } // 创建缩略图 Bitmap returnImage = new System.Drawing.Bitmap(new_width, new_height); System.Drawing.Graphics graphic = System.Drawing.Graphics.FromImage(returnImage); //指定画布大小并以透明色填充空余部分 graphic.FillRectangle(new System.Drawing.SolidBrush(System.Drawing.Color.White), new System.Drawing.Rectangle(0, 0, new_width, new_height)); //设置高质量绘画 graphic.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic; graphic.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; //输出缩略图 graphic.DrawImage(original_image, 0, 0, new_width, new_height); return(returnImage); }
/// <summary> /// 指定大小简单等比缩放图片 /// </summary> /// <param name="original_image"></param> /// <param name="new_width"></param> /// <returns></returns> //public static Bitmap GetSimpleThumbnailImage(Image original_image, int new_width, int new_height) //{ // NewImageSize imageSize = new NewImageSize(original_image.Width, original_image.Height, new_width, new_height); // Bitmap returnImage = null; // returnImage = new Bitmap(original_image, imageSize.NewWidth, imageSize.NewHeight); // return returnImage; //} /// <summary> /// 根据指定大小绘制高质量缩略图 /// </summary> /// <param name="original_image"></param> /// <param name="new_width"></param> /// <returns></returns> public static Bitmap GetThumbnailImage(Image original_image, ThumbnailImageType titCase, int target_width, int target_height) { System.Drawing.Graphics graphic = null; Bitmap returnImage = null; int origin_width = original_image.Width; int origin_height = original_image.Height; int paste_x = 0, paste_y = 0; NewImageSize imageSize = new NewImageSize(original_image.Width, original_image.Height, target_width, target_height); int new_width = imageSize.NewWidth, new_height = imageSize.NewHeight; target_width = imageSize.NewWidth; target_height = imageSize.NewHeight; float origin_ratio = imageSize.OrignRatio; float target_ratio = imageSize.NewRatio; //缩略图生成方式 switch (titCase) { //缩放全图到正确比例 case ThumbnailImageType.Zoom: if (target_ratio > origin_ratio) { //较宽图片 new_height = (int)Math.Floor((float)target_width / origin_ratio); new_width = target_width; } else { //较高图片 new_height = target_height; new_width = (int)Math.Floor(origin_ratio * (float)target_height); } new_width = new_width > target_width ? target_width : new_width; new_height = new_height > target_height ? target_height : new_height; break; //截取高宽比中间部分 case ThumbnailImageType.Cut: if (target_ratio > origin_ratio) { //较高图片 new_height = (int)Math.Floor((float)target_width / origin_ratio); new_width = target_width; } else { //较宽图片 new_height = target_height; new_width = (int)Math.Floor(origin_ratio * (float)target_height); } break; } paste_x = (target_width - new_width) / 2; paste_y = (target_height - new_height) / 2; // 创建缩略图 returnImage = new System.Drawing.Bitmap(target_width, target_height); graphic = System.Drawing.Graphics.FromImage(returnImage); //指定画布大小并以透明色填充空余部分 graphic.FillRectangle(new System.Drawing.SolidBrush(System.Drawing.Color.White), new System.Drawing.Rectangle(0, 0, target_width, target_height)); //设置高质量绘画 graphic.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic; graphic.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; //输出缩略图 graphic.DrawImage(original_image, paste_x, paste_y, new_width, new_height); return(returnImage); }