在ASP.NET中,生成缩略图通常涉及图像处理库,如System.Drawing(注意,在.NET Core及更高版本中,建议使用ImageSharp等库,因为System.Drawing可能不被直接支持)。下面是一个使用System.Drawing在ASP.NET中生成缩略图的示例方法。请注意,如果你在使用.NET Core或.NET 5/6/7等更高版本,请考虑使用ImageSharp等库。
using System;
using System.Drawing; // 注意:在.NET Core及更高版本中,请改用ImageSharp
using System.Drawing.Imaging;
using System.IO;
public class ImageResizer
{
/// <summary>
/// 生成缩略图
/// </summary>
/// <param name="sourceImagePath">原始图片路径</param>
/// <param name="destinationImagePath">目标图片(缩略图)路径</param>
/// <param name="width">缩略图宽度</param>
/// <param name="height">缩略图高度</param>
public void CreateThumbnail(string sourceImagePath, string destinationImagePath, int width, int height)
{
using (Image originalImage = Image.FromFile(sourceImagePath))
{
// 设定缩略图的宽度和高度
Size thumbnailSize = new Size(width, height);
// 创建一个新的位图对象,该对象将用于保存缩略图
using (Bitmap thumbnailBmp = new Bitmap(thumbnailSize.Width, thumbnailSize.Height))
{
// 设定高质量插值法
using (Graphics graphic = Graphics.FromImage(thumbnailBmp))
{
graphic.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
graphic.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
graphic.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
// 计算缩放比例
Rectangle destRect = new Rectangle(0, 0, thumbnailSize.Width, thumbnailSize.Height);
Rectangle srcRect = new Rectangle(0, 0, originalImage.Width, originalImage.Height);
float nPercent = 0;
nPercent = ((float)originalImage.Width / (float)thumbnailSize.Width);
if ((originalImage.Height / nPercent) < thumbnailSize.Height)
{
nPercent = ((float)originalImage.Height / (float)thumbnailSize.Height);
}
// 根据缩放比例调整源图尺寸
srcRect.Width = (int)((float)originalImage.Width / nPercent);
srcRect.Height = (int)((float)originalImage.Height / nPercent);
// 绘制缩略图
graphic.DrawImage(originalImage, destRect, srcRect, GraphicsUnit.Pixel);
// 保存缩略图
thumbnailBmp.Save(destinationImagePath, ImageFormat.Jpeg); // 可以根据需要选择不同的格式
}
}
}
}
}
在这个示例中,`CreateThumbnail`方法接受原始图片路径、目标图片(缩略图)路径、缩略图的宽度和高度作为参数。它首先加载原始图片,然后根据指定的宽度和高度创建一个新的位图对象(用于保存缩略图)。接下来,它计算缩放比例,并据此调整源图的尺寸。最后,使用`Graphics`对象将调整后的源图绘制到新的位图对象上,并保存为JPEG格式的文件。
请注意,由于`System.Drawing`在.NET Core及更高版本中可能不被直接支持,因此如果你在这些环境中工作,请考虑使用如ImageSharp等库来实现类似的功能。