本文最后更新于30 天前,其中的信息可能已经过时,如有错误请发送邮件到
sunrisetsn@gmail.com
这是项目的第一个正式版本。最初只是想实现图片转字符画,后来慢慢加入了 GUI、PNG 导出以及彩色 ASCII 等功能。目前已经能够满足日常图片转换需求,后续也会继续完善更多特性。
——一个基于 Python 开发的 ASCII 字符画生成器。


前言:
原图为X平台(原Twitter)的Kaigen 1025(@KTx3rl8o)老师所画,如有侵权必删!
转出来的字符画有30MB大小,这里只能放压缩后的图片,不过细看应该还是能看见很模糊的字符。
一.功能
- 简洁的图形化界面(GUI)
- 支持导入 PNG / JPG / JPEG / BMP 等常见图片格式
- 支持自定义 ASCII 输出宽度
- 支持实时预览生成的 ASCII 字符画
- 支持导出 TXT 字符画文件
- 支持导出 PNG 图片
- 支持彩色 ASCII(Color ASCII)
二.技术栈
| 技术 | 用途 |
|---|---|
| Python 3 | 项目开发语言 |
| OpenCV (cv2) | 图片读取、灰度转换、缩放、图像增强 |
| Pillow (PIL) | 字符绘制、PNG 导出、字体渲染 |
| PySide6 (Qt) | GUI 图形界面开发 |
三.使用到的主要模块
①OpenCV
负责图像处理。
主要使用:
cv2.imread()
cv2.cvtColor()
cv2.resize()
cv2.convertScaleAbs()
实现了:
- 图片读取
- RGB 转灰度图
- 图片缩放
- 对比度调整
- Gamma 校正
- 彩色图片读取
②Pillow
负责字符画渲染。
主要使用:
Image
ImageDraw
ImageFont
实现:
- 导出 PNG
- 创建画布
- 加载字体
- 绘制字符
③PySide6
整个软件界面均基于 Qt 开发。
主要使用:
QMainWindow
QWidget
QLabel
QPushButton
QLineEdit
QTextEdit
QCheckBox
QHBoxLayout
QVBoxLayout
QFileDialog
QMessageBox
QPixmap
实现:
- 图片选择
- 图片预览
- ASCII 实时预览
- 参数输入
- 按钮交互
四.实现原理
整个转换流程如下:
原图
│
▼
读取图片(OpenCV)
│
▼
灰度化
│
▼
图像增强(对比度、Gamma)
│
▼
按照设定宽度缩放
│
▼
根据灰度值映射 ASCII 字符
│
▼
生成字符画
│
├── 导出 TXT
│
└── Pillow 渲染
│
▼
导出 PNG
五.彩色ASCII
彩色 ASCII 的实现思路比较简单:
字符由灰度决定,颜色则保留原图对应位置的 RGB 信息。
灰度
↓
决定使用哪个字符
RGB
↓
决定字符颜色
最终逐字符绘制到 PNG,因此能够保留原图的大致色彩,同时拥有 ASCII 字符画的视觉效果。
六.开发记录
这是我从零开始完成的第一个图像处理小项目。从最初只能输出 TXT,到后来加入 GUI、PNG 渲染、彩色 ASCII,在不断调试字符比例、字体、图像缩放以及颜色映射的过程中,对 OpenCV、Pillow 和 Qt 的使用也逐渐熟悉了不少。
目前它还远称不上完善,但已经能够完成最初设想的功能。后续也会继续迭代,把它一步步做成一个更加完整、更加好用的 ASCII Generator。

