简介:本文详细介绍了如何使用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需下载字体文件(如思源黑体、微软雅黑)。确保字体文件路径正确,否则会报错。
from PIL import Image, ImageDraw, ImageFont# 打开图片image = Image.open("input.jpg")draw = ImageDraw.Draw(image)# 加载中文字体(需指定字体文件路径)font_path = "simhei.ttf" # 替换为实际字体路径font_size = 40font = 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")
font_size调整,需与图片分辨率匹配。(255, 0, 0)。居中计算:通过图片宽度和文字宽度计算居中位置。
text_width, text_height = draw.textsize(text, font=font)image_width, image_height = image.sizex = (image_width - text_width) / 2y = (image_height - text_height) / 2draw.text((x, y), text, font=font, fill=color)
自动换行:需手动实现或使用第三方库(如textwrap)。
# 描边(黑色外框)stroke_color = (0, 0, 0)offset = 2for 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)
结合变量动态生成文字,如时间戳、用户输入。
import datetimecurrent_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")draw.text((50, 50), f"拍摄时间:{current_time}", font=font, fill=color)
中文显示为方框
原因:未指定中文字体或字体文件路径错误。
解决:检查字体路径,使用绝对路径更可靠。
文字位置偏移
原因:坐标计算错误或字体大小不匹配。
解决:使用draw.textsize()获取文字尺寸后调整位置。
性能优化
批量处理时,避免重复加载字体文件。可将字体对象缓存为全局变量。
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)
```
OpenCV实现
OpenCV的putText函数支持基础文字添加,但中文需额外处理(如通过Pillow生成文字掩码后合成)。
GUI工具开发
使用PyQt或Tkinter开发简单界面,方便非技术用户操作。
通过Python实现照片中文文字添加,不仅能提升效率,还能为项目增加灵活性。建议从简单案例入手,逐步探索复杂场景。