本文介绍了一种使用GDI+在图片上添加水印的方法,支持文字和图片水印,可以设置透明度、角度和位置。提供的代码示例展示了一个名为`BuildWatermark`的函数,该函数接收源图片路径、水印图片路径、文字水印、目标图片路径和定位尺寸等参数。
在GDI+中,处理图片水印的关键步骤如下:
1. **加载源图片**:首先,使用`Image.FromFile`方法从指定路径加载源图片,然后获取图片的宽度和高度,用于创建一个新的`Bitmap`对象。`Bitmap`对象用于在内存中表示图像,便于后续处理。
2. **创建Bitmap对象**:创建一个新的`Bitmap`对象,设置其分辨率,并使用源图片的宽度和高度初始化。像素格式设置为24bppRgb,即24位真彩色。
3. **创建Graphics对象**:通过`Graphics.FromImage`方法创建一个`Graphics`对象,它提供了在图像上进行绘图的能力。设置`SmoothingMode`为`SmoothingMode.AntiAlias`,确保图像平滑无锯齿。
4. **加载水印图片**:同样使用`Image.FromFile`方法加载水印图片,获取其宽度和高度。水印图片可以是预先准备好的带有透明度的PNG或BMP文件。
5. **绘制源图片**:使用`DrawImage`方法将源图片绘制到`Bitmap`对象上,设置为原始大小,坐标原点为(0,0),保持原有比例。
6. **确定文字水印大小**:如果应用文字水印,需要找到适合图片宽度的最大字体大小。这可以通过遍历一系列字体大小,测量版权字符串在特定大小下占用的空间,直到达到图片宽度的限制。
7. **绘制水印**:使用`DrawImage`或`DrawString`方法将图片或文字水印添加到源图片上。可以设置水印的透明度(通过调整Alpha通道)、旋转角度以及在图片上的位置。
8. **保存结果**:最后,使用`bmPhoto.Save`方法将带有水印的新图片保存到指定的目标路径。
注意,代码中的`locatesize`参数可能用于指定水印的位置,例如中心、角落等。实际应用时,需要根据具体需求实现这个功能,如使用条件语句或循环来确定水印的位置。
这个方法提供了一种灵活的方式,在不破坏源图片质量的前提下,为图片添加保护性或装饰性的水印。通过调整代码,可以定制水印的样式和效果,满足不同应用场景的需求。