asp.net生成缩略图示例方法分享


在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等库来实现类似的功能。