原代码来自共享,这里谢一下原作者,再增加点扩展,分享一下
,扩展:ThumbMode.MaxHW 模式
,说明:最大宽高比例缩放,最大边按比例缩放
,例1:原图 100*50 生成 50*30,则结果为 50*25
,例2:原图 100*50 生成 50*10,则结果为 20*10
,例3:原图 100*50 生成 200*300,则结果不视为原图。即生成的宽,大于或等于原图宽,或生成的高,大于或等于原图高时,使用原图比例
,使用代码:Thumbnail.MakeThumbnailImage(@"d:\存在的图片.jpg", @"d:\生成的图片文件名.jpg", 50, 30, ThumbMode.MaxHW);
using System;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
using System.IO;
using System.Net;
namespace Common {
public enum ThumbMode {
Default,
HW,
W,
H,
Cut,
MaxHW
}
/// <summary>
/// Thumbnail 生成缩略图,生成压缩图,
/// </summary>
public class Thumbnail {
private Image srcImage;
private string srcFileName;
/// <summary>
/// 创建
/// </summary>
/// <param name="FileName">原始图片路径</param>
public bool SetImage(string FileName) {
srcFileName = JnUtils.GetMapPath(FileName);
try {
srcImage = Image.FromFile(srcFileName);
}
catch {
return false;
}
return true;
}
/// <summary>
/// 回调
/// </summary>
/// <returns></returns>
public bool ThumbnailCallback() => false;
/// <summary>
/// 生成缩略图,返回缩略图的Image对象
/// </summary>
/// <param name="Width">缩略图宽度</param>
/// <param name="Height">缩略图高度</param>
/// <returns>缩略图的Image对象</returns>
public Image GetImage(int Width, int Height) {
Image img;
Image.GetThumbnailImageAbort callb = new Image.GetThumbnailImageAbort(ThumbnailCallback);
img = srcImage.GetThumbnailImage(Width, Height, callb, IntPtr.Zero);
return img;
}
/// <summary>
/// 保存缩略图
/// </summary>
/// <param name="Width"></param>
/// <param name="Height"></param>
public void SaveThumbnailImage(int Width, int Height) {
switch (Path.GetExtension(srcFileName).ToLower()) {
case ".png":
SaveImage(Width, Height, ImageFormat.Png);
break;
case ".gif":
SaveImage(Width, Height, ImageFormat.Gif);
break;
default:
SaveImage(Width, Height, ImageFormat.Jpeg);
break;
}
}
/// <summary>
/// 生成缩略图并保存
/// </summary>
/// <param name="Width">缩略图的宽度</param>
/// <param name="Height">缩略图的高度</param>
/// <param name="imgformat">保存的图像格式</param>
/// <returns>缩略图的Image对象</returns>
public void SaveImage(int Width, int Height, ImageFormat imgformat) {
if (imgformat != ImageFormat.Gif && (srcImage.Width > Width) || (srcImage.Height > Height)) {
Image img;
Image.GetThumbnailImageAbort callb = new Image.GetThumbnailImageAbort(ThumbnailCallback);
img =