下面我将为你详细讲解asp.net生成高质量缩略图通用函数的攻略。
1. 简介
在很多网站中,我们经常需要使用到缩略图功能。ASP.NET提供了一种方便快捷的方法来生成缩略图。我们可以使用System.Drawing
和System.Drawing.Imaging
命名空间中的类来实现。这里,我们将制作一个通用函数,它支持多种生成方式,能够根据需要生成指定大小和质量的缩略图。
2. 实现
首先,我们需要在项目中引用System.Drawing
和System.Drawing.Imaging
,并声明它们的命名空间。
using System.Drawing;
using System.Drawing.Imaging;
接下来,我们可以在代码中声明一个缩略图生成函数,用来生成指定大小和质量的缩略图。
public static void GenerateThumbnail(string sourcePath, string destinationPath, int width, int height, long quality)
{
using (var sourceImage = new Bitmap(sourcePath))
{
var sourceWidth = sourceImage.Width;
var sourceHeight = sourceImage.Height;
var destWidth = width;
var destHeight = height;
var sourceRatio = (double)sourceWidth / sourceHeight;
var destRatio = (double)destWidth / destHeight;
if (sourceRatio > destRatio)
{
destHeight = (int)(width / sourceRatio);
}
else
{
destWidth = (int)(height * sourceRatio);
}
var destImage = new Bitmap(destWidth, destHeight);
using (var graphics = Graphics.FromImage(destImage))
{
graphics.SmoothingMode = SmoothingMode.HighQuality;
graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
graphics.PixelOffsetMode = PixelOffsetMode.HighQuality;
graphics.DrawImage(sourceImage, new Rectangle(0, 0, destWidth, destHeight));
var qualityParamId = Encoder.Quality;
var encoderParameters = new EncoderParameters(1);
encoderParameters.Param[0] = new EncoderParameter(qualityParamId, quality);
var jpgEncoder = GetEncoder(ImageFormat.Jpeg);
destImage.Save(destinationPath, jpgEncoder, encoderParameters);
}
}
}
这个函数的参数比较简单:
sourcePath
: 原始图片的路径destinationPath
: 生成缩略图的路径width
和height
: 缩略图的宽度和高度quality
: 缩略图的质量,从0到100
在函数内部,我们首先获取原始图像的宽度和高度,并根据源模板的宽高比和目标模板的宽高比计算目标图像的宽度和高度。然后,我们使用System.Drawing
命名空间中的类来创建一个新的位图来保存缩略图,然后使用System.Drawing
中的Graphics
类来绘制缩略图,并将缩略图保存到指定的路径中。
3. 示例
以下是一个完整的示例代码,展示了如何使用上述函数来生成缩略图:
var sourcePath = "source.jpg";
var destinationPath = "destination.jpg";
var width = 200;
var height = 200;
var quality = 80L;
GenerateThumbnail(sourcePath, destinationPath, width, height, quality);
这将生成一个200x200像素的JPEG格式缩略图,并将其保存到destinationPath
路径中,质量为80。注意:在实际的生产环境中,请根据需要设置正确的宽度,高度和质量。
下面是另一个生成缩略图的示例,该示例尝试连接到并下载远程图像:
public static void GenerateThumbnailFromUrl(string sourceUrl, string destinationPath, int width, int height, long quality)
{
using(var webClient = new WebClient())
{
using(var sourceStream = webClient.OpenRead(sourceUrl))
{
using(var destinationStream = File.Open(destinationPath, FileMode.Create))
{
var sourceImage = new Bitmap(sourceStream);
var sourceWidth = sourceImage.Width;
var sourceHeight = sourceImage.Height;
var destWidth = width;
var destHeight = height;
var sourceRatio = (double)sourceWidth / sourceHeight;
var destRatio = (double)destWidth / destHeight;
if (sourceRatio > destRatio)
{
destHeight = (int)(width / sourceRatio);
}
else
{
destWidth = (int)(height * sourceRatio);
}
var destImage = new Bitmap(destWidth, destHeight);
using (var graphics = Graphics.FromImage(destImage))
{
graphics.SmoothingMode = SmoothingMode.HighQuality;
graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
graphics.PixelOffsetMode = PixelOffsetMode.HighQuality;
graphics.DrawImage(sourceImage, new Rectangle(0, 0, destWidth, destHeight));
var qualityParamId = Encoder.Quality;
var encoderParameters = new EncoderParameters(1);
encoderParameters.Param[0] = new EncoderParameter(qualityParamId, quality);
var jpgEncoder = GetEncoder(ImageFormat.Jpeg);
destImage.Save(destinationStream, jpgEncoder, encoderParameters);
}
}
}
}
}
在这个示例中,我们首先使用WebClient
类连接到远程URL,然后打开该URL,然后使用创建的输入流读取图像数据。然后,我们通过使用System.Drawing
命名空间中的类来生成缩略图,然后将其保存到指定的路径中。
4. 结语
到这里,我们完成了asp.net生成高质量缩略图通用函数的完整攻略。这个函数是使用System.Drawing
和System.Drawing.Imaging
命名空间中的类来生成缩略图。我们还展示了如何根据需要生成指定大小和质量的缩略图,并提供了两个示例。希望这篇攻略能够对你有所帮助!
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:asp.net生成高质量缩略图通用函数(c#代码),支持多种生成方式 - Python技术站