1. 简介
在日常图像处理中,为图片添加水印是一项常见任务。有多种方法和工具可供选择,而今天我们将专注于使用Python语言结合PIL库批量添加水印。
需要注意的是,所选用的图片格式不应为JPG或JPEG,因为这两种格式的图片不支持透明度设置。
2. PIL库概述
先前的文章已经详细介绍过PIL库,这里不再赘述。
- PIL是Python的图像处理库,支持多种文件格式。
- PIL提供强大的图像和图形处理功能,包括缩放、裁剪、叠加以及添加线条、文字等操作。
- 安装PIL库可使用以下命令:
pip install Pillow

3. PIL库中涉及的类
| 模块或类 | 说明 |
|---|---|
| image模块 | 用于图像处理 |
| ImageDraw | 2D图像对象 |
| ImageFont | 字体存储 |
| ImageEnhance | 图像增强 |
4. 实现原理
本文的主要目标是批量为某个文件夹下的图片添加水印,实现原理如下:
- 设置水印内容;
- 使用Image对象的open()方法打开原始图片;
- 使用Image对象的new()方法创建存储水印图片的对象;
- 使用ImageDraw.Draw对象的text()方法绘制水印文字;
- 使用ImageEnhance中Brightness的enhance()方法设置水印透明度。
5. 实现过程
5.1 原始图片
设定原始图片的存储目录,例如:
F:\python_study\image\image01
5.2 导入相关模块
导入所需的PIL模块或类:
from PIL imort Image, ImageDraw, ImageFont, ImageEnhance
import os
5.3 初始化数据
通过用户手动输入相关信息,如图片存储路径、水印文字、水印位置、水印透明度等:
class WatermarkText():
def __init__(self):
super(WatermarkText, self).__init__()
self.image_path = input('图片路径:')
self.watermark_text = input('水印文字:')
self.position_flag = int(input('水印位置(1:左上角,2:左下角,3:右上角,4:右下角,5:居中):'))
self.opacity = float(input('水印透明度(0—1之间的1位小数):'))
5.4 水印字体设置
选择系统字体库中的字体:
self.font = ImageFont.truetype("cambriab.ttf", size=35)
5.5 打开原始图片并创建存储对象
打开原始图片并转换为RGBA:
image = Image.open(img).convert('RGBA')
创建绘制对象:
new_img = Image.new('RGBA', image.size, (255, 255, 255, 0))
image_draw = ImageDraw.Draw(new_img)
5.6 计算图片和水印的大小
计算图片大小:
w, h = image.size
计算文字大小:
w1 = self.font.getsize(self.watermark_text)[0]
h

本文介绍了如何使用Python的PIL库批量为图片添加水印,涵盖实现原理、步骤详解及代码展示。同时探讨了优化点,包括参数输入优化、异常处理、代码结构和日志记录等,旨在提升程序的稳定性和用户体验。
最低0.47元/天 解锁文章
2万+

被折叠的 条评论
为什么被折叠?



