C# 使用 System.Drawing 实现图片添加水印与缩放剪切实例

小鹿同学
小鹿同学
发布时间:2026-10-14| 5人浏览过
原创

在 C# 开发中,经常需要为上传的图片自动添加版权水印或生成预览缩略图。本文将提供一个完整的 ImgWater 辅助类示例,涵盖图片水印(含透明度与边距控制)、文字水印(自适应字体大小)以及图像缩放与裁剪等核心图像处理操作。

准备工作与依赖

本方案基于 .NET Framework 环境下的 System.Drawing 命名空间。在使用以下代码前,请确保项目中已引用该库。对于涉及文件写入的操作,需保证运行账户具备对应目录的读写权限。

第1步:定义 ImgWater 类结构

创建一个名为 ImgWater 的公共类,内部封装了各个图像处理的具体方法。以下是该类所需的命名空间引入:

using System;
using System.IO;
using System.Drawing;
using System.Drawing.Imaging;
using System.Drawing.Drawing2D;

图片水印处理

图片水印常用于品牌标识叠加。本方法通过计算水印图与原图的尺寸比例,自动调整水印大小,并利用色彩矩阵实现透明度混合。

第2步:调用 zzsImgWater 方法

目的:将指定的水印图片合成到原图右下角区域。

重要参数:

  • ImgFile: 原始图片路径。
  • WaterImg: 水印图片路径。
  • sImgPath: 处理后图片的保存路径。
  • Alpha: 水印透明度系数(0.0-1.0)。
  • iScale: 水印占原图宽度的比例基准。
  • intDistance: 距离图片边缘的最小像素间距。

第3步:核心逻辑解析

算法首先读取原图和水印图,根据预设比例计算新的水印尺寸。若水印过大,则按 iScale 缩小;若过小且符合范围,则保持原长宽比缩放。合成时,通过 ImageAttributes 设置颜色矩阵:colorMatrixElements 中的第四行第四列即为 Alpha 通道值,用于控制透明效果。

  1. 加载图像并获取宽高。
    System.Drawing.Image imgPhoto = System.Drawing.Image.FromFile(ImgFile);
  2. 创建画布并锁定分辨率。
    bmPhoto.SetResolution(72, 72);
  3. 绘制原图到内存位图,再创建水印图层副本。
  4. 配置透明度矩阵:
    imageAttributes.SetColorMatrix(wmColorMatrix, ...);
  5. 确定坐标并进行合成绘制:
    gWatermark.DrawImage(imgWatermark, rect, ..., imageAttributes);
  6. 以 Jpeg 格式保存结果并释放资源。

文字水印处理

除了 Logo 图片,直接打印文本也是常见的防伪手段。该方法会自动根据文字长度动态选择最大的合适字号。

第4步:调用 zzsTextWater 方法

入口:通过类实例化调用 zzsTextWater。

参数说明:

  • TextFont: 要显示的水印文字内容。
  • hScale: 垂直位置比例(参考底部)。
  • widthFont: 文字宽度占比限制。
  • Alpha: 文字的透明度(0-255)。

第5步:字体自适应算法

代码中包含了一个从大到小的字号数组 { 28, 26, 24, 20, 16, 14, 12 }。系统会遍历此数组,使用 MeasureString 测算文字在图形上下文中的实际占据宽度。一旦实测宽度小于原图宽度的指定比例 widthFont,循环终止,选中该字号以确保水印既显眼又不遮挡主体。

组合水印与高级裁剪

组合水印:zzsImgTextWater 方法结合了上述两者的逻辑,先在指定坐标画出文字,再叠加图片水印。注意其默认水平居中,垂直高度可由参数调整。

第6步:缩略图与裁剪操作

缩略图 (zzsResizeImg):支持指定目标宽和高,以及背景色(如黑色或白色)。当原图无法完全填满目标区域时,会在剩余部分填充设定背景色,并保持长宽比不变形。

裁剪 (zzsCutImg):提取原图的特定矩形区域。需注意参数顺序,避免混淆坐标与尺寸。

完成判断与注意事项

完成判断:当方法返回 true 时,表示图片已成功保存至 sImgPath 指定的路径。若发生文件被占用或路径无效异常,返回 false。

  • 资源释放:所有绘图操作务必在末尾调用 Dispose() 销毁 Graphics、Bitmap 和 Image 对象,防止内存泄漏。
  • 格式锁定:代码中固定使用 ImageFormat.Jpeg 保存,如需 PNG 支持透明通道,可修改此处格式定义。

以上就是C#给图片添加水印及处理的详细内容,更多关于C#图像处理与编程实践的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。