Python 批量给图片添加文字或图片水印实战
使用 Python 的 PIL 库为图片批量添加水印的方法。通过 ImageDraw 模块实现文字水印,支持自定义字体、大小和位置;通过 Image.paste 方法实现图片水印,可调整尺寸和位置。提供完整的目录结构建议和批量处理代码示例,涵盖横竖版图片自适应逻辑,帮助开发者快速实现自动化图片处理任务。

使用 Python 的 PIL 库为图片批量添加水印的方法。通过 ImageDraw 模块实现文字水印,支持自定义字体、大小和位置;通过 Image.paste 方法实现图片水印,可调整尺寸和位置。提供完整的目录结构建议和批量处理代码示例,涵盖横竖版图片自适应逻辑,帮助开发者快速实现自动化图片处理任务。

在处理大量照片时,手动添加水印效率低下。使用 Python 的 PIL(Pillow)库可以高效实现图片文字的批量添加。相比 OpenCV 的 cv2.putText(),PIL 在中文显示和字体自定义方面更具优势。
确保已安装 Pillow 库:
pip install Pillow
项目目录结构建议如下:
main.py:主程序脚本input/:存放原始图片output/:存放处理后的图片font/:存放中文字体文件(如 .ttf)ImageDraw 模块提供绘制方法。核心函数 draw.text() 用于写入文字。
关键参数:
xy:坐标位置(左上角为原点)text:字符串内容fill:文字颜色(RGB 元组或十六进制)font:通过 ImageFont.truetype 指定字体路径和大小代码示例:
import os
from PIL import Image, ImageFont, ImageDraw
def add_text_watermark(image_path):
image = Image.open(image_path)
draw_txt = ImageDraw.Draw(image)
im_size = image.size
# 根据图片尺寸自适应字体大小
if im_size[0] > im_size[1]:
txt_size = int(im_size[0] * 0.02)
else:
txt_size = int(im_size[1] * 0.02)
# 设置中文字体路径(请确保路径正确)
chi_font = ImageFont.truetype('./font/fzstk.ttf', size=txt_size)
# 计算居中位置
x = (im_size[0] - txt_size) // 2
y = im_size[1] - int(txt_size * 1.2)
draw_txt.text(xy=(x, y), text='@水印文字', font=chi_font, fill=(255, 255, 255))
return image
使用 image.paste() 可以将另一张图片(如 Logo)粘贴到底图上。
注意事项:
代码示例:
from PIL import Image
def add_image_watermark(image_path):
image = Image.open(image_path)
mark_image = Image.open('./font/logo.png')
im_size = image.size
# 根据底图尺寸计算水印大小
if im_size[0] > im_size[1]:
mark_size = int(im_size[0] * 0.08)
else:
mark_size = int(im_size[1] * 0.08)
# 压缩水印图
mark_image.thumbnail((mark_size, mark_size))
# 计算粘贴位置(左上角偏移)
position = (mark_size // 3, mark_size // 3)
# 粘贴图像
image.paste(mark_image, position, mark_image)
return image
结合 os 模块遍历文件夹,实现批量自动化处理。
import os
def batch_process(input_dir, output_dir, process_func):
if not os.path.exists(output_dir):
os.makedirs(output_dir)
files = [f for f in os.listdir(input_dir) if f.lower().endswith(('.png', '.jpg', '.jpeg'))]
for file in files:
input_path = os.path.join(input_dir, file)
try:
processed_img = process_func(input_path)
output_path = os.path.join(output_dir, file)
processed_img.save(output_path, quality=95)
print(f'Processed: {file}')
except Exception as e:
print(f'Error processing {file}: {e}')
# 调用示例
# batch_process('./input', './output', add_text_watermark)
C:\Windows\Fonts,Linux/Mac 在 /usr/share/fonts。建议将常用字体复制到项目 font 目录下。.ttf 文件路径正确。通过 PIL 库,我们可以灵活定制水印的位置、大小、内容和样式。修改参数即可适应不同场景需求,无需依赖第三方软件,非常适合集成到自动化工作流中。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online