Python 图片水印处理工具

  1. 自定义水印文本
  2. 自定义水印位置
  3. 支持图片裁剪
  4. 支持各种图片格式
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"
)

这个类提供了以下功能:

  1. 可以自定义字体和字体大小
  2. 支持水印位置的自定义(居中或指定坐标)
  3. 支持图片裁剪
  4. 可以自定义输出路径
  5. 水印文字支持半透明效果

使用时需要安装 Pillow 库:

pip install Pillow

如果需要使用自定义字体,可以在创建实例时指定字体文件路径:

watermarker = ImageWatermarker(font_path="path/to/font.ttf", font_size=50)