在Web开发中,常常需要对上传的图片进行处理,例如生成缩略图和添加水印等。下面介绍一种使用ASP.NET实现图片处理的方法,包括生成缩略图和添加水印功能。
1. 生成缩略图
在ASP.NET中,可以使用System.Drawing命名空间中的Image类和Graphics类实现对图片的处理。生成缩略图常常需要指定缩略图的宽度和高度。下面是一个生成缩略图的方法:
public static void GenerateThumbnail(string sourceImagePath, string thumbnailPath, int width, int height)
{
using (var sourceImage = Image.FromFile(sourceImagePath))
{
int sourceWidth = sourceImage.Width;
int sourceHeight = sourceImage.Height;
float sourceRatio = (float)sourceWidth / sourceHeight;
float thumbnailRatio = (float)width / height;
int thumbnailWidth, thumbnailHeight;
if (sourceRatio > thumbnailRatio)
{
thumbnailWidth = width;
thumbnailHeight = (int)(width / sourceRatio);
}
else
{
thumbnailWidth = (int)(height * sourceRatio);
thumbnailHeight = height;
}
using (var thumbnailImage = new Bitmap(thumbnailWidth, thumbnailHeight))
{
using (var graphics = Graphics.FromImage(thumbnailImage))
{
graphics.SmoothingMode = SmoothingMode.AntiAlias;
graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
graphics.PixelOffsetMode = PixelOffsetMode.HighQuality;
graphics.DrawImage(sourceImage, new Rectangle(0, 0, thumbnailWidth, thumbnailHeight));
thumbnailImage.Save(thumbnailPath, sourceImage.RawFormat);
}
}
}
}
这个方法的参数sourceImagePath和thumbnailPath分别表示源图片的路径和缩略图的路径,width和height分别表示缩略图的宽度和高度。在方法中创建了源图片(sourceImage)和缩略图(thumbnailImage)的实例,使用Graphics类对图片进行处理,最后保存缩略图到指定路径中。
1.1 示例
以下是一个调用上述方法的示例,生成宽度为200像素、高度为150像素的缩略图:
var sourceImagePath = "source.jpg";
var thumbnailPath = "thumbnail.jpg";
int width = 200;
int height = 150;
GenerateThumbnail(sourceImagePath, thumbnailPath, width, height);
2. 添加水印
添加水印是另一种常见的图片处理需求。在ASP.NET中,可以使用Graphics类绘制文本或图像作为水印。下面是添加文字水印的方法:
public static void AddTextWatermark(string sourceImagePath, string watermarkedImagePath, string watermarkText)
{
using (var sourceImage = Image.FromFile(sourceImagePath))
{
using (var graphics = Graphics.FromImage(sourceImage))
{
Font font = new Font("Arial", 20, FontStyle.Bold, GraphicsUnit.Pixel);
SizeF textSize = graphics.MeasureString(watermarkText, font);
float x = (float)sourceImage.Width - textSize.Width - 10;
float y = (float)sourceImage.Height - textSize.Height - 10;
graphics.DrawString(watermarkText, font, Brushes.White, x, y);
}
sourceImage.Save(watermarkedImagePath, sourceImage.RawFormat);
}
}
这个方法的参数sourceImagePath和watermarkedImagePath分别表示源图片的路径和添加水印后的图片路径,watermarkText表示水印文字。方法中创建源图片(sourceImage)的实例,使用Graphics类在图片上添加水印,最后保存加了水印的图片到指定路径中。
2.1 示例
以下是一个调用上述方法的示例,添加了一个文本水印:
var sourceImagePath = "source.jpg";
var watermarkedImagePath = "watermarked.jpg";
string watermarkText = "Example.com";
AddTextWatermark(sourceImagePath, watermarkedImagePath, watermarkText);
除了添加文字水印外,还可以添加图像水印。下面是添加图像水印的方法:
public static void AddImageWatermark(string sourceImagePath, string watermarkedImagePath, string watermarkImagePath)
{
using (var sourceImage = Image.FromFile(sourceImagePath))
{
using (var watermarkImage = Image.FromFile(watermarkImagePath))
{
int x = sourceImage.Width - watermarkImage.Width - 10;
int y = sourceImage.Height - watermarkImage.Height - 10;
using (var graphics = Graphics.FromImage(sourceImage))
{
graphics.DrawImage(watermarkImage, new Rectangle(x, y, watermarkImage.Width, watermarkImage.Height),
0, 0, watermarkImage.Width, watermarkImage.Height, GraphicsUnit.Pixel);
}
}
sourceImage.Save(watermarkedImagePath, sourceImage.RawFormat);
}
}
这个方法的参数sourceImagePath和watermarkedImagePath分别表示源图片的路径和添加水印后的图片路径,watermarkImagePath表示水印图片的路径。方法中创建源图片(sourceImage)和水印图片(watermarkImage)的实例,使用Graphics类在源图片上添加水印图片,最后保存加了水印的图片到指定路径中。
2.2 示例
以下是一个调用上述方法的示例,添加了一个图像水印:
var sourceImagePath = "source.jpg";
var watermarkedImagePath = "watermarked.jpg";
string watermarkImagePath = "watermark.png";
AddImageWatermark(sourceImagePath, watermarkedImagePath, watermarkImagePath);
通过上述方法,可以在ASP.NET应用中方便地处理图片,生成缩略图和添加水印等功能。