termgrid 是一个轻量级 Python 库,能够将图片、LaTeX 公式或自定义二进制矩阵转换为终端可显示的盲文点阵字符,让你在命令行中可视化图像和数学公式。
- 将任意图片转换为终端盲文点阵
- 渲染 LaTeX 公式为终端盲文点阵
- 支持自定义终端显示颜色
- 可配置输出宽度和阈值函数
- 高效的点阵匹配算法,支持任意尺寸的输入
确保你的系统已安装以下依赖包:
pip install pillow matplotlib numpyTip
如果需要渲染 LaTeX 公式,还需在系统中安装 LaTeX 环境(如 TeX Live、MikTeX 或 MacTeX)。
使用 pip 安装 termgrid:
pip install termgridfrom termgrid import ImageGrid
# 定义灰度阈值函数(RGB转黑白)
def threshold(rgb):
# 计算灰度值,小于128则为1(显示盲文点),否则为0
gray = 0.299 * rgb[0] + 0.587 * rgb[1] + 0.114 * rgb[2]
return 1 if gray < 128 else 0
# 创建图片网格对象(指定图片路径、阈值函数、宽度、颜色)
img_grid = ImageGrid(
image="your_image.png",
threshold_fn=threshold,
width=50, # 输出宽度(盲文字符数)
color=[255, 0, 0] # 红色显示(RGB)
)
# 在终端打印盲文点阵
print(img_grid)from termgrid import LaTeXGrid
# 创建LaTeX网格对象
latex_grid = LaTeXGrid(
latex=r"\sum_{i=1}^n i = \frac{n(n+1)}{2}", # LaTeX公式
use_latex=True, # 启用LaTeX渲染(需系统安装LaTeX)
width=80, # 输出宽度
color=[0, 255, 0] # 绿色显示
)
# 打印LaTeX公式的盲文点阵
print(latex_grid)from termgrid import Grid
# 自定义4x4二进制矩阵(1表示显示点,0表示不显示)
custom_matrix = [
[1, 0, 1, 0],
[0, 1, 0, 1],
[1, 0, 1, 0],
[0, 1, 0, 1]
]
# 创建网格对象
custom_grid = Grid(
binary_list=custom_matrix,
color=[0, 0, 255] # 蓝色显示
)
# 打印自定义点阵
print(custom_grid)| 类型名 | 定义 | 说明 |
|---|---|---|
BinaryMatrix |
List[List[Literal[0, 1]]] |
二进制矩阵,1表示显示点,0表示不显示 |
ColorType |
List[int, int, int] |
RGB颜色值,范围0-255 |
ThresholdFunctionType |
Callable[[tuple[int, int, int]], Literal[0, 1]] |
阈值函数,接收RGB元组,返回0或1 |
Grid(binary_list: BinaryMatrix, color: Optional[ColorType] = None)binary_list: 二进制矩阵数据color: 可选,RGB颜色值,用于终端彩色显示
__str__(): 返回格式化的盲文点阵字符串(带颜色编码)_binary_list_to_grid(): 内部方法,将二进制矩阵转换为盲文字符串
继承自 Grid 类,用于处理图片转换。
ImageGrid(image: PathLike, threshold_fn: ThresholdFunctionType, width: int = 100, color: Optional[ColorType] = None)image: 图片文件路径threshold_fn: 阈值函数,用于将RGB像素转换为0/1width: 输出宽度(盲文字符数),默认100color: 可选,RGB颜色值
_to_binary_list(): 内部方法,将图片转换为二进制矩阵
继承自 ImageGrid 类,用于处理LaTeX公式转换。
LaTeXGrid(latex: str, use_latex: bool = True, width: int = 100, color: Optional[ColorType] = None)latex: LaTeX公式字符串(无需包裹$,内部会自动添加)use_latex: 是否启用LaTeX渲染,默认Truewidth: 输出宽度,默认100color: 可选,RGB颜色值
_generate_latex_image(): 内部方法,生成LaTeX公式的图片并保存为latex.png
你可以根据需求自定义阈值函数,实现不同的效果:
# 只保留红色通道的阈值函数
def red_channel_threshold(rgb):
# 只检测红色分量,大于150则显示点
return 1 if rgb[0] > 150 else 0
# 反相显示的阈值函数
def invert_threshold(rgb):
gray = 0.299 * rgb[0] + 0.587 * rgb[1] + 0.114 * rgb[2]
return 0 if gray < 128 else 1 # 反转黑白
# 使用自定义阈值函数
img_grid = ImageGrid(
image="test.png",
threshold_fn=red_channel_threshold,
width=60
)输出宽度决定了盲文点阵的精细程度,宽度越大,细节越丰富:
# 低分辨率(快速显示)
low_res = ImageGrid("image.jpg", threshold, width=30)
# 高分辨率(细节丰富)
high_res = ImageGrid("image.jpg", threshold, width=120)-
LaTeX 渲染:
- 启用
use_latex=True时,需确保系统已安装LaTeX环境 - 复杂公式可能需要调整
fontsize参数(在_generate_latex_image方法中) - 生成的
latex.png文件会覆盖同名文件
- 启用
-
终端兼容性:
- 部分终端可能不支持24位真彩色,颜色参数可能无效
- 盲文字符显示效果因终端字体而异,建议使用支持Unicode的终端(如iTerm2、Windows Terminal)
-
性能:
- 处理大尺寸图片或高宽度值时,转换时间会增加
- 建议根据终端窗口大小调整宽度参数