Pillow 学习笔记:图像绘制基础与实践
本文最后更新于14 天前,其中的信息可能已经过时,如有错误请发送邮件到 sunrisetsn@gmail.com

〇 前言

请搭配上一篇文章(《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.

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇