- 自定义水印文本
- 自定义水印位置
- 支持图片裁剪
- 支持各种图片格式
from PIL import Image, ImageDraw, ImageFont
import os
class ImageWatermarker:
def __init__(self, font_path=None, font_size=40):
"""
初始化水印处理器
font_path: 字体文件路径,默认使用系统默认字体
font_size: 字体大小,默认40
"""
if font_path and os.path.exists(font_path):
self.font = ImageFont.truetype(font_path, font_size)
else:
self.font = ImageFont.load_default()
def add_watermark(self, image_path, text, position='center', crop=None, output_path=None):
"""
为图片添加水印
image_path: 图片路径
text: 水印文字
position: 水印位置,可以是'center'或者(x,y)坐标
crop: 裁剪区域,格式为(left, top, right, bottom)
output_path: 输出路径,默认为原图片名称加上"_watermarked"
"""
# 打开图片
img = Image.open(image_path)
# 如果需要裁剪
if crop:
img = img.crop(crop)
# 创建可绘制对象
draw = ImageDraw.Draw(img)
# 获取文字大小
text_width, text_height = draw.textsize(text, self.font)
# 计算水印位置
if position == 'center':
x = (img.width - text_width) // 2
y = (img.height - text_height) // 2
else:
x, y = position
# 添加水印
draw.text((x, y), text, font=self.font, fill=(255, 255, 255, 128))
# 设置输出路径
if not output_path:
file_name, ext = os.path.splitext(image_path)
output_path = f"{file_name}_watermarked{ext}"
# 保存图片
img.save(output_path)
return output_path
使用示例:
from watermark import ImageWatermarker
# 创建水印处理器实例
watermarker = ImageWatermarker()
# 添加居中水印
watermarker.add_watermark(
"input.jpg",
"版权所有",
position='center'
)
# 添加自定义位置的水印
watermarker.add_watermark(
"input.jpg",
"版权所有",
position=(100, 100),
output_path="output_custom.jpg"
)
# 裁剪并添加水印
watermarker.add_watermark(
"input.jpg",
"版权所有",
position='center',
crop=(100, 100, 800, 600),
output_path="output_cropped.jpg"
)
这个类提供了以下功能:
- 可以自定义字体和字体大小
- 支持水印位置的自定义(居中或指定坐标)
- 支持图片裁剪
- 可以自定义输出路径
- 水印文字支持半透明效果
使用时需要安装 Pillow 库:
pip install Pillow
如果需要使用自定义字体,可以在创建实例时指定字体文件路径:
watermarker = ImageWatermarker(font_path="path/to/font.ttf", font_size=50)