Python照片添加中文文字:从基础到进阶的全流程指南
一、为什么需要Python添加中文文字?
在图像处理场景中,为照片添加中文文字的需求广泛存在:社交媒体分享时标注地点/人物、电商产品图添加说明、教育课件标注知识点、个人作品水印等。传统方法依赖PS等图形软件,但批量处理或动态内容生成时效率低下。Python通过Pillow(PIL)、OpenCV等库可实现自动化、可定制的文字添加,尤其适合需要处理大量图片或动态内容的场景。
二、环境准备与核心库安装
基础环境
Python 3.6+(推荐3.8+),通过pip install pillow
安装Pillow库(Pillow是PIL的分支,功能更强大)。如需更复杂的图像处理,可安装OpenCV(pip install opencv-python
)。字体文件准备
中文显示需指定中文字体文件(如.ttf
或.otf
)。Windows系统可从C:\Windows\Fonts
复制,Linux/macOS需下载字体文件(如思源黑体、微软雅黑)。确保字体文件路径正确,否则会报错。
三、基础实现:使用Pillow添加中文
1. 基础代码示例
from PIL import Image, ImageDraw, ImageFont
# 打开图片
image = Image.open("input.jpg")
draw = ImageDraw.Draw(image)
# 加载中文字体(需指定字体文件路径)
font_path = "simhei.ttf" # 替换为实际字体路径
font_size = 40
font = ImageFont.truetype(font_path, font_size)
# 添加文字(参数:位置、文本、字体、填充颜色)
text = "你好,世界!"
position = (50, 50) # 左上角坐标
color = (255, 255, 255) # 白色
draw.text(position, text, font=font, fill=color)
# 保存图片
image.save("output.jpg")
2. 关键参数解析
- 字体大小:通过
font_size
调整,需与图片分辨率匹配。 - 颜色:RGB元组,如红色
(255, 0, 0)
。 - 位置:坐标原点为图片左上角,单位为像素。
- 抗锯齿:Pillow默认启用抗锯齿,文字边缘更平滑。
四、进阶技巧:优化文字显示效果
1. 文字居中与自动换行
居中计算:通过图片宽度和文字宽度计算居中位置。
text_width, text_height = draw.textsize(text, font=font)
image_width, image_height = image.size
x = (image_width - text_width) / 2
y = (image_height - text_height) / 2
draw.text((x, y), text, font=font, fill=color)
自动换行:需手动实现或使用第三方库(如
textwrap
)。
2. 文字描边与阴影
- 描边效果:通过多次绘制不同颜色的文字模拟。
# 描边(黑色外框)
stroke_color = (0, 0, 0)
offset = 2
for dx, dy in [(-offset, 0), (offset, 0), (0, -offset), (0, offset)]:
draw.text((x+dx, y+dy), text, font=font, fill=stroke_color)
# 主文字
draw.text((x, y), text, font=font, fill=color)
3. 动态内容生成
结合变量动态生成文字,如时间戳、用户输入。
import datetime
current_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
draw.text((50, 50), f"拍摄时间:{current_time}", font=font, fill=color)
五、常见问题与解决方案
中文显示为方框
原因:未指定中文字体或字体文件路径错误。
解决:检查字体路径,使用绝对路径更可靠。文字位置偏移
原因:坐标计算错误或字体大小不匹配。
解决:使用draw.textsize()
获取文字尺寸后调整位置。性能优化
批量处理时,避免重复加载字体文件。可将字体对象缓存为全局变量。
六、实际应用场景
- 批量添加水印
遍历文件夹中的图片,统一添加水印。
```python
import os
input_dir = “input_images”
output_dir = “output_images”
os.makedirs(output_dir, exist_ok=True)
for filename in os.listdir(input_dir):
if filename.lower().endswith((“.png”, “.jpg”, “.jpeg”)):
image_path = os.path.join(input_dir, filename)
image = Image.open(image_path)
draw = ImageDraw.Draw(image)
draw.text((50, 50), “版权所有”, font=font, fill=color)
output_path = os.path.join(output_dir, filename)
image.save(output_path)
```
- 电商产品图生成
结合Excel数据批量生成带价格、描述的图片。
七、扩展工具推荐
OpenCV实现
OpenCV的putText
函数支持基础文字添加,但中文需额外处理(如通过Pillow生成文字掩码后合成)。GUI工具开发
使用PyQt或Tkinter开发简单界面,方便非技术用户操作。
八、总结与建议
- 初学者:从Pillow基础开始,掌握字体、位置、颜色等核心参数。
- 进阶用户:尝试动态内容、批量处理、GUI开发。
- 企业应用:结合数据库或API实现自动化图片标注系统。
通过Python实现照片中文文字添加,不仅能提升效率,还能为项目增加灵活性。建议从简单案例入手,逐步探索复杂场景。