〇 前言
请搭配上一篇文章(《OpenCV 学习笔记:图像处理基础与实践》)一块阅读更好,此文中是在ASCII-Generator项目(以下简称为“本项目”)的基础上进行学习和总结。
以下文章部分内容为ChatGPT生成,请仔细斟酌。
一 什么是 Pillow
Pillow(Python Imaging Library,简称 PIL)是 Python 中最常用的图像处理库之一,也是 PIL(Python Imaging Library)的一个持续维护版本。Pillow 提供了丰富的图像创建、编辑、绘制以及格式转换等功能,能够方便地完成图片生成、文字绘制、图像合成、颜色处理等操作,因此被广泛应用于图像处理、数据可视化、验证码生成以及计算机视觉等领域。
与 OpenCV 偏重于图像分析和计算机视觉不同,Pillow 更侧重于图像的绘制与编辑。在本项目(ASCII Generator)中,OpenCV 负责图像预处理,而 Pillow 主要负责将 ASCII 字符按照指定字体绘制到画布中,并最终生成 PNG 图片,实现字符画的可视化输出。
二 如何配置 Pillow
本项目采用 Python 开发,通过 pip 安装 Pillow。
安装命令如下:
pip install pillow
导入方式如下:
from PIL import Image, ImageDraw, ImageFont
其中:
- Image:负责创建、读取和保存图片
- ImageDraw:负责图像绘制
- ImageFont:负责字体加载
三 Pillow 核心知识点
3.1 图像创建
Pillow 可以直接创建一张新的图片作为画布。
例如:
img = Image.new(
"RGB",
(width, height),
"white"
)
其中:
- RGB:图像模式
- width、height:画布尺寸
- white:背景颜色
整个 ASCII 图片最终就是绘制在该画布上的。
3.2 图像绘制
Pillow 通过 ImageDraw 模块进行图像绘制。
例如:
draw = ImageDraw.Draw(img)
创建完成后即可在画布上绘制:
- 文本
- 直线
- 圆形
- 矩形
- 多边形
本项目主要使用文本绘制。
3.3 字体加载
为了保证 ASCII 字符间距一致,本项目采用等宽字体。
例如:
font = ImageFont.truetype(
"consola.ttf",
10
)
其中:
- Consolas 为 Windows 常用等宽字体;
- 字号决定最终 PNG 图片中字符的大小。
字体选择会直接影响 ASCII 字符画的视觉效果。
3.4 文本绘制
Pillow 提供 draw.text() 函数绘制单个字符。
例如:
draw.text(
(x, y),
char,
fill=(r, g, b),
font=font
)
其中:
- (x,y):绘制位置
- char:ASCII 字符
- fill:字体颜色
- font:字体对象
本项目采用逐字符绘制方式,因此能够实现彩色 ASCII。
3.5 文字尺寸计算
在绘制字符之前,需要计算整个字符画所占据的尺寸。
本项目使用:
draw.multiline_textbbox()
计算文本边界。
例如:
bbox = draw.multiline_textbbox(
(0,0),
text,
font=font
)
根据返回结果即可计算:
- 图片宽度
- 图片高度
从而创建大小合适的画布。
3.6 图片保存
绘制完成后,可以直接保存图片。
例如:
img.save(
output_path
)
Pillow 支持:
- PNG
- JPG
- BMP
- GIF
- TIFF
- WEBP
等多种图片格式。
本项目最终导出 PNG 图片。
3.7 RGB 颜色绘制
Pillow 支持使用 RGB 指定文字颜色。
例如:
fill=(r,g,b)
其中:
- R:红色
- G:绿色
- B:蓝色
每个字符均采用对应像素的 RGB 值进行绘制,因此能够较好地保留原图的颜色信息,实现彩色 ASCII 效果。
四 Pillow 在本项目中的应用
在 ASCII Generator 中,Pillow 主要承担字符渲染任务,其处理流程如下:
ASCII 文本
↓
加载字体(ImageFont)
↓
计算文本尺寸(multiline_textbbox)
↓
创建画布(Image.new)
↓
创建绘图对象(ImageDraw.Draw)
↓
逐字符绘制(draw.text)
↓
生成 PNG 图片
整个流程中,Pillow 不负责字符生成,而是负责将 ASCII 文本转换为最终可视化图片,是项目中图像渲染模块的核心。
其中,各模块功能如下:
| Pillow 模块 | 主要作用 |
|---|---|
| Image.new() | 创建画布 |
| ImageDraw.Draw() | 创建绘图对象 |
| ImageFont.truetype() | 加载字体 |
| multiline_textbbox() | 计算文本尺寸 |
| draw.text() | 绘制字符 |
| Image.save() | 保存图片 |
五 本章小结
本章介绍了 Pillow 在 ASCII Generator 项目中的应用,包括 Pillow 的基本概念、环境配置以及图像创建、字体加载、文本绘制、尺寸计算和图片保存等核心知识点。
在整个项目中,Pillow 主要承担 ASCII 字符画的可视化渲染任务。通过创建画布、加载等宽字体、逐字符绘制以及图片保存等操作,将前面生成的 ASCII 文本转换为 PNG 图片。同时结合 RGB 颜色信息,实现了彩色 ASCII 字符画的输出,使最终生成的图片在保留字符艺术风格的同时,也能够较好地还原原始图像的颜色信息。
可以认为,Pillow 是整个 ASCII Generator 的图像渲染核心,与 OpenCV 的图像预处理模块共同构成了项目最重要的两大功能模块。
参考文献
[1] Clark A. Pillow (Python Imaging Library Fork) Documentation[EB/OL]. https://pillow.readthedocs.io/, 2026. [2] Pillow Developers. Pillow GitHub Repository[EB/OL]. https://github.com/python-pillow/Pillow, 2026. [3] Python Software Foundation. Python 3 Documentation[EB/OL]. https://docs.python.org/3/, 2026. [4] NumPy Developers. NumPy Documentation[EB/OL]. https://numpy.org/doc/, 2026.

