Python照片添加中文文字:从基础到进阶的全流程指南

一、为什么需要Python添加中文文字?

在图像处理场景中,为照片添加中文文字的需求广泛存在:社交媒体分享时标注地点/人物、电商产品图添加说明、教育课件标注知识点、个人作品水印等。传统方法依赖PS等图形软件,但批量处理或动态内容生成时效率低下。Python通过Pillow(PIL)、OpenCV等库可实现自动化、可定制的文字添加,尤其适合需要处理大量图片或动态内容的场景。

二、环境准备与核心库安装

  1. 基础环境
    Python 3.6+(推荐3.8+),通过pip install pillow安装Pillow库(Pillow是PIL的分支,功能更强大)。如需更复杂的图像处理,可安装OpenCV(pip install opencv-python)。

  2. 字体文件准备
    中文显示需指定中文字体文件(如.ttf.otf)。Windows系统可从C:\Windows\Fonts复制,Linux/macOS需下载字体文件(如思源黑体、微软雅黑)。确保字体文件路径正确,否则会报错。

三、基础实现:使用Pillow添加中文

1. 基础代码示例

  1. from PIL import Image, ImageDraw, ImageFont
  2. # 打开图片
  3. image = Image.open("input.jpg")
  4. draw = ImageDraw.Draw(image)
  5. # 加载中文字体(需指定字体文件路径)
  6. font_path = "simhei.ttf" # 替换为实际字体路径
  7. font_size = 40
  8. font = ImageFont.truetype(font_path, font_size)
  9. # 添加文字(参数:位置、文本、字体、填充颜色)
  10. text = "你好,世界!"
  11. position = (50, 50) # 左上角坐标
  12. color = (255, 255, 255) # 白色
  13. draw.text(position, text, font=font, fill=color)
  14. # 保存图片
  15. image.save("output.jpg")

2. 关键参数解析

  • 字体大小:通过font_size调整,需与图片分辨率匹配。
  • 颜色:RGB元组,如红色(255, 0, 0)
  • 位置:坐标原点为图片左上角,单位为像素。
  • 抗锯齿:Pillow默认启用抗锯齿,文字边缘更平滑。

四、进阶技巧:优化文字显示效果

1. 文字居中与自动换行

  • 居中计算:通过图片宽度和文字宽度计算居中位置。

    1. text_width, text_height = draw.textsize(text, font=font)
    2. image_width, image_height = image.size
    3. x = (image_width - text_width) / 2
    4. y = (image_height - text_height) / 2
    5. draw.text((x, y), text, font=font, fill=color)
  • 自动换行:需手动实现或使用第三方库(如textwrap)。

2. 文字描边与阴影

  • 描边效果:通过多次绘制不同颜色的文字模拟。
    1. # 描边(黑色外框)
    2. stroke_color = (0, 0, 0)
    3. offset = 2
    4. for dx, dy in [(-offset, 0), (offset, 0), (0, -offset), (0, offset)]:
    5. draw.text((x+dx, y+dy), text, font=font, fill=stroke_color)
    6. # 主文字
    7. draw.text((x, y), text, font=font, fill=color)

3. 动态内容生成

结合变量动态生成文字,如时间戳、用户输入。

  1. import datetime
  2. current_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
  3. draw.text((50, 50), f"拍摄时间:{current_time}", font=font, fill=color)

五、常见问题与解决方案

  1. 中文显示为方框
    原因:未指定中文字体或字体文件路径错误。
    解决:检查字体路径,使用绝对路径更可靠。

  2. 文字位置偏移
    原因:坐标计算错误或字体大小不匹配。
    解决:使用draw.textsize()获取文字尺寸后调整位置。

  3. 性能优化
    批量处理时,避免重复加载字体文件。可将字体对象缓存为全局变量。

六、实际应用场景

  1. 批量添加水印
    遍历文件夹中的图片,统一添加水印。
    ```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)
```

  1. 电商产品图生成
    结合Excel数据批量生成带价格、描述的图片。

七、扩展工具推荐

  1. OpenCV实现
    OpenCV的putText函数支持基础文字添加,但中文需额外处理(如通过Pillow生成文字掩码后合成)。

  2. GUI工具开发
    使用PyQt或Tkinter开发简单界面,方便非技术用户操作。

八、总结与建议

  • 初学者:从Pillow基础开始,掌握字体、位置、颜色等核心参数。
  • 进阶用户:尝试动态内容、批量处理、GUI开发。
  • 企业应用:结合数据库或API实现自动化图片标注系统。

通过Python实现照片中文文字添加,不仅能提升效率,还能为项目增加灵活性。建议从简单案例入手,逐步探索复杂场景。