Python中如何创建与文本精准适配的图像?(Pillow/同类工具)
使用Pillow创建与文本精准适配的图像
不需要先创建超大尺寸图像再裁剪——Pillow提供了直接计算文本尺寸的方法,能精准创建刚好适配文本的图像,实现类似ImageMagick convert -font Calibri -pointsize 24 label:"Sample text with a foo bar attached to it." sample.png 的效果。
具体实现步骤如下:
计算文本的精确边界
用ImageDraw.textbbox()方法可以获取文本的边界框坐标,通过坐标差值能算出文本的实际宽度和高度。需要提前指定字体、字号等参数,确保和最终绘制的文本一致。创建对应尺寸的图像
根据计算出的文本宽高,创建刚好容纳文本的RGB图像,背景颜色可自定义(比如示例中的白色)。绘制文本到图像
把文本绘制到新创建的图像上,对齐方式要和计算边界时保持一致,确保文本完全填满图像。
完整代码示例:
from PIL import Image, ImageDraw, ImageFont # 配置文本和字体参数 text_content = "Sample text with a foo bar attached to it." font_file = "Calibri.ttf" # 请确保字体文件存在,或替换为系统字体的正确路径 font_size = 24 # 加载指定字体 target_font = ImageFont.truetype(font_file, font_size) # 临时创建空白图像用于获取Draw对象,计算文本边界 temp_draw = ImageDraw.Draw(Image.new("RGB", (1, 1))) text_bbox = temp_draw.textbbox((0, 0), text_content, font=target_font, anchor="lt") text_width = text_bbox[2] - text_bbox[0] text_height = text_bbox[3] - text_bbox[1] # 创建刚好适配文本的图像 final_image = Image.new("RGB", (text_width, text_height), color="white") final_draw = ImageDraw.Draw(final_image) # 将文本绘制到图像左上角(和边界计算时的锚点一致) final_draw.text((0, 0), text_content, font=target_font, fill="black", anchor="lt") # 保存结果 final_image.save("sample.png")
注意:textbbox()是Pillow 9.1.0及以上版本新增的方法,替代了已弃用的textsize()。如果使用旧版本Pillow,可能需要用textsize()来计算尺寸,但推荐升级到新版本以获得更准确的边界计算。
内容的提问来源于stack exchange,提问作者Hans
相关产品推荐
相关产品推荐

