在社交媒体时代,微博作为重要的信息分享平台,用户经常需要为图片添加水印以保护版权或增加个性化元素。然而,手动为每张图片添加居中水印不仅耗时,还容易出错。本文将介绍如何使用Python结合PIL库(Python Imaging Library,即Pillow库)实现微博水印的居中设置,并支持批量处理图片,让你的水印添加工作变得高效且准确。
一、准备工作
在开始之前,请确保你的Python环境已经安装了Pillow库。如果没有安装,可以通过pip命令进行安装:

```bash
pip install pillow
```
二、基础水印添加
首先,我们来看如何为单张图片添加居中水印。以下是一个简单的示例代码:
```python
from PIL import Image, ImageDraw, ImageFont
def add_centered_watermark(image_path, watermark_text, output_path):
打开图片
image = Image.open(image_path)
width, height = image.size
创建一个透明的图层用于绘制水印
watermark_layer = Image.new('RGBA', (width, height), (0, 0, 0, 0))
draw = ImageDraw.Draw(watermark_layer)
设置字体和大小(这里使用默认字体,实际使用时可以指定字体文件路径)
font_size = min(width, height) // 20 根据图片大小调整字体大小
try:
font = ImageFont.truetype("arial.ttf", font_size) Windows系统常用字体
except IOError:
font = ImageFont.load_default() 如果找不到字体,使用默认字体
计算水印文本的宽度和高度
text_width, text_height = draw.textsize(watermark_text, font=font)
计算水印位置(居中)
x = (width - text_width) // 2
y = (height - text_height) // 2
绘制水印(这里使用半透明白色)
draw.text((x, y), watermark_text, font=font, fill=(255, 255, 255, 128))
将水印图层与原图合并
result = Image.alpha_composite(image.convert('RGBA'), watermark_layer)
保存结果(如果原图不是RGBA模式,需要转换回原模式或保存为PNG)
if image.mode != 'RGBA':
result = result.convert(image.mode)
result.save(output_path)
使用示例
add_centered_watermark('input.jpg', 'My Watermark', 'output.jpg')
```
三、批量处理图片
接下来,我们将上述功能扩展到批量处理图片。假设你有一个文件夹包含多张需要添加水印的图片,你可以使用以下代码进行批量处理:
```python
import os
from PIL import Image, ImageDraw, ImageFont
def batch_add_centered_watermark(input_folder, output_folder, watermark_text):
确保输出文件夹存在
if not os.path.exists(output_folder):
os.makedirs(output_folder)
遍历输入文件夹中的所有图片文件
for filename in os.listdir(input_folder):
if filename.lower().endswith(('.png', '.jpg', '.jpeg')):
input_path = os.path.join(input_folder, filename)
output_path = os.path.join(output_folder, filename)
调用单张图片的水印添加函数
add_centered_watermark(input_path, watermark_text, output_path)
使用示例
batch_add_centered_watermark('input_images', 'output_images', 'Batch Watermark')
```
四、优化与扩展
1. 字体选择:在实际应用中,你可能希望使用特定的字体文件。可以通过修改`ImageFont.truetype()`函数的参数来指定字体文件路径。
2. 水印样式:除了简单的文本水印,你还可以添加图片水印或更复杂的效果,如阴影、渐变等。
3. 性能优化:对于大量图片的处理,可以考虑使用多线程或多进程来加速处理过程。
4. 错误处理:在实际应用中,添加适当的错误处理机制,如检查图片是否损坏、文件是否可写等。
五、总结
通过Python结合PIL库,我们可以轻松实现微博水印的居中设置,并支持批量处理图片。这种方法不仅高效准确,而且灵活可扩展,可以根据实际需求进行定制。希望本文的教程能帮助你更好地管理图片水印,提升工作效率。
