在ASP.NET开发中,给图片添加图片水印是常见的功能需求,通常用于保护图片版权或者标注图片来源。实现这个功能主要依赖System.Drawing命名空间下的相关类,下面详细介绍具体的实现方法。

实现前的准备
首先需要引入必要的命名空间,这些命名空间提供了图像操作的核心能力:
using System.Drawing; using System.Drawing.Imaging; using System.IO;
核心实现步骤
给图片添加图片水印的核心逻辑可以分为几个步骤:
- 读取原始图片和水印图片到内存中
- 创建画布,将原始图片绘制到画布上
- 调整水印图片的大小和透明度(可选)
- 将水印图片绘制到原始图片的指定位置
- 输出合成后的图片,释放相关资源
完整示例代码
以下是一个完整的ASP.NET一般处理程序示例,实现给指定图片添加图片水印的功能:
public class AddWatermark : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
// 原始图片路径和水印图片路径,实际项目中可根据需求调整
string originalImagePath = context.Server.MapPath("~/images/original.jpg");
string watermarkImagePath = context.Server.MapPath("~/images/watermark.png");
// 读取原始图片和水印图片
using (Image originalImage = Image.FromFile(originalImagePath))
using (Image watermarkImage = Image.FromFile(watermarkImagePath))
{
// 创建画布,大小和原始图片一致
using (Bitmap canvas = new Bitmap(originalImage.Width, originalImage.Height))
using (Graphics graphics = Graphics.FromImage(canvas))
{
// 设置高质量绘制参数
graphics.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
// 先将原始图片绘制到画布上
graphics.DrawImage(originalImage, 0, 0, originalImage.Width, originalImage.Height);
// 调整水印大小,这里设置为原始图片宽高的20%,可根据需求修改
int watermarkWidth = (int)(originalImage.Width * 0.2);
int watermarkHeight = (int)((double)watermarkImage.Height / watermarkImage.Width * watermarkWidth);
// 设置水印位置,这里放在右下角,距离边缘10像素
int x = originalImage.Width - watermarkWidth - 10;
int y = originalImage.Height - watermarkHeight - 10;
// 绘制水印图片到画布
graphics.DrawImage(watermarkImage, x, y, watermarkWidth, watermarkHeight);
// 设置输出格式为JPEG
context.Response.ContentType = "image/jpeg";
// 保存合成后的图片到输出流
canvas.Save(context.Response.OutputStream, ImageFormat.Jpeg);
}
}
}
public bool IsReusable
{
get { return false; }
}
}注意事项
在实际使用时需要注意以下几点:
- 确保原始图片和水印图片的路径正确,并且程序对对应目录有读取权限
- 如果水印图片有透明通道,System.Drawing会自动处理透明度,不需要额外设置
- 大量处理图片时需要注意资源释放,使用using语句可以避免内存泄漏
- 如果需要调整水印的透明度,可以通过将水印图片绘制到临时画布设置透明度后再合成
如果需要给批量图片添加水印,只需要遍历图片目录,对每张图片执行上述合成逻辑即可,实现方式类似,只需调整图片读取和输出的路径逻辑。
ASP.NET图片水印System.Drawing图像合成水印叠加修改时间:2026-06-04 14:51:36