简介:本文详细介绍了如何使用Python为照片添加中文文字,涵盖Pillow库的安装、基础文字添加、字体与样式调整、中文乱码解决方案及进阶技巧,适合开发者及图像处理爱好者。
在数字图像处理领域,为照片添加文字是常见的需求,尤其是中文文字的嵌入,对本地化应用和社交媒体分享至关重要。Python凭借其丰富的图像处理库(如Pillow、OpenCV)和简洁的语法,成为实现这一功能的理想工具。本文将系统讲解如何使用Python为照片添加中文文字,从基础操作到进阶技巧,覆盖字体选择、样式调整、乱码解决等关键问题。
Pillow是Python中最常用的图像处理库之一,支持图像的打开、编辑、保存等操作。要使用Pillow添加中文文字,需先安装该库:
pip install pillow
安装完成后,可通过以下代码验证安装是否成功:
from PIL import Image, ImageDraw, ImageFontprint("Pillow安装成功,版本为:", Image.__version__)
Pillow的ImageDraw模块提供了在图像上绘制文字的功能。以下是添加英文文字的基础示例:
from PIL import Image, ImageDraw# 打开图片image = Image.open("input.jpg")draw = ImageDraw.Draw(image)# 添加英文文字draw.text((50, 50), "Hello, World!", fill="white")# 保存图片image.save("output.jpg")
此代码将“Hello, World!”以白色字体添加到图片的(50, 50)坐标处。但若尝试添加中文(如“你好”),会因默认字体不支持中文而显示为方框或乱码。
要正确显示中文,需指定支持中文的字体文件(如.ttf格式)。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)# 添加中文文字draw.text((50, 50), "你好,世界!", fill="white", font=font)# 保存图片image.save("output_chinese.jpg")
此代码通过ImageFont.truetype加载中文字体,确保中文正常显示。
fill参数支持RGB元组(如(255, 0, 0)表示红色)或颜色名称(如"red")。font_size调整字体大小。
text = "居中文字"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, fill="white", font=font)
中文乱码通常由以下原因导致:
font_path正确。open("text.txt", "r", encoding="utf-8"))。draw.text(position, text, font=font, fill=fill_color)
for y_offset in range(-outline_width, outline_width + 1):if x_offset != 0 or y_offset != 0:draw.text((position[0] + x_offset, position[1] + y_offset), text, font=font, fill=outline_color)
draw_outlined_text(draw, (50, 50), “描边文字”, font, “black”, “white”, outline_width=2)
2. **文字阴影**:类似描边,但仅在特定方向偏移:```pythondef draw_shadow_text(draw, position, text, font, shadow_color, fill_color, shadow_offset=(2, 2)):draw.text((position[0] + shadow_offset[0], position[1] + shadow_offset[1]), text, font=font, fill=shadow_color)draw.text(position, text, font=font, fill=fill_color)# 使用示例draw_shadow_text(draw, (50, 50), "阴影文字", font, "gray", "white", shadow_offset=(2, 2))
以下代码演示如何为文件夹内所有图片批量添加中文水印:
import osfrom PIL import Image, ImageDraw, ImageFontdef add_watermark(input_folder, output_folder, watermark_text):if not os.path.exists(output_folder):os.makedirs(output_folder)font_path = "simhei.ttf"font_size = 30font = ImageFont.truetype(font_path, font_size)for filename in os.listdir(input_folder):if filename.lower().endswith((".png", ".jpg", ".jpeg")):image_path = os.path.join(input_folder, filename)image = Image.open(image_path)draw = ImageDraw.Draw(image)# 计算水印位置(右下角)text_width, text_height = draw.textsize(watermark_text, font=font)image_width, image_height = image.sizex = image_width - text_width - 10y = image_height - text_height - 10draw.text((x, y), watermark_text, fill="white", font=font)output_path = os.path.join(output_folder, filename)image.save(output_path)# 使用示例add_watermark("input_images", "output_images", "版权所有")
simhei.ttf、macOS的PingFang.ttc),或从可信来源下载字体。通过本文的讲解,读者已掌握使用Python为照片添加中文文字的核心技能,包括基础操作、样式调整、乱码解决及进阶技巧。这些知识不仅适用于个人项目,也可扩展至商业应用(如电商图片水印、社交媒体内容生成)。建议读者进一步探索Pillow的其他功能(如图像滤镜、裁剪旋转),或结合OpenCV实现更复杂的图像处理流程。