Python 实现文本转图片输出详解

小满
小满
发布时间:2026-10-12| 2人浏览过
原创

本文介绍如何使用 Python 的 Pillow 库将指定文本自动换行并渲染为图片。通过加载自定义字体、智能计算排版尺寸、创建画布及逐行绘制,可实现灵活的文本导出功能。完整代码与参数配置可直接运行,适用于快速生成图文素材。

核心逻辑与准备工作

将纯文本转换为图像的核心在于字体的度量计算与画布的动态分配。Python 标准库并不包含高级排版功能,通常需借助第三方图像处理套件。操作前请确保已安装最新版 Pillow,并在系统目录中准备好对应的字体文件(如微软雅黑 msyh.ttf 或思源黑体)。对于包含特殊字符或中文的长文本,还需确认脚本编码格式统一为 UTF-8,避免因平台差异导致乱码或中断。

代码实现与操作步骤

# -*- coding:utf-8 -*-
from PIL import Image, ImageFont, ImageDraw

# 1. 定义输入参数
input_text = u"欢迎访问本站, https://www.example.com"
font_file = "msyh.ttf"
font_size = 18
max_width = 300
margin = 10

# 加载字体对象
font = ImageFont.truetype(font_file, font_size)
draw_canvas = Image.new("RGB", (1, 1), (255, 255, 255))
drawer = ImageDraw.Draw(draw_canvas)

lines = []
current_line = ""
words = input_text.split()

for word in words:
    candidate = current_line + " " + word if current_line else word
    # 使用现代API校验宽度是否溢出设定阈值
    if font.getlength(candidate) >= max_width:
        lines.append(current_line)
        current_line = word
    else:
        current_line = candidate

lines.append(current_line)

# 2. 计算画布精确尺寸
_, line_height = draw_canvas.textbbox((0, 0), "T", font=font)[3:]
total_height = line_height * len(lines) + margin * 2
img_obj = Image.new("RGB", (max_width + margin * 2, total_height), (255, 255, 255))
dr = ImageDraw.Draw(img_obj)

# 3. 坐标定位与逐行渲染
y_start = margin
for ln in lines:
    dr.text((margin, y_start), ln.strip(), font=font, fill="#000000")
    y_start += line_height

img_obj.save("output_result.png")

第1步:初始化画布与字体加载

首先导入 Image、ImageFont 与 ImageDraw 三大核心模块。通过 ImageFont.truetype() 传入本地字体路径与字号,生成用于度量字符宽高的实例。此时可顺手创建一个极小的临时画布,用于后续调用 textbbox 获取单行基准高度,避免硬编码数值导致布局错位。

第2步:文本分块与画布尺寸计算

程序按空格分割原始字符串,逐个拼接测试当前行长。一旦 font.getlength() 返回的像素宽度超出设定的 max_width(默认300),即触发换行逻辑,将上一行存入列表并清空缓冲区。循环结束后补入最后一行。随后根据行数乘以单行高度加上上下留白,动态计算出目标图像的总宽高,并通过 Image.new() 创建白色背景的 RGB 画布。

第3步:逐行绘制并导出结果

以左侧留白 margin 和顶部起始点 y_start 为基准,遍历每一行文本。调用 dr.text((x, y), text, font=font, fill=color) 完成像素级绘制,每写完一行垂直向下偏移一个行高间距。绘制完成后直接调用对象的 save() 方法保存为 PNG 或 JPG 格式。打开新生成的文件即可看到排版整齐的文本图片。

常见问题与排错指南

  • 找不到字体文件: Windows 通常位于 C:/Windows/Fonts/,Linux/Mac 需指定绝对路径。未正确引用会导致 OSError,建议打印 os.path.exists() 提前校验。
  • 依赖库版本警告: getsize() 在新版 Pillow 中已被标记为废弃。上述代码已全面替换为 getlength() 和 textbbox(),若仍遇到报错,请将 Pillow 升级至 9.2.0 以上版本。
  • 中文显示为方块: 检查脚本头部声明是否包含 # -*- coding:utf-8 -*-,并确保所用字体文件本身支持中文字形集(如 TTF/OTF 格式的思源黑体或微软雅黑)。

总结

该方法通过手动控制字符边界检测与动态尺寸计算,解决了固定模板无法适应多变文本长度的痛点。调整字号、行距与背景色后即可直接投入实际工作流中使用。以上就是基于 Python 与 Pillow 将文本转换成图片输出的详细内容,更多关于 Python 图像处理与自动化排版技巧的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。