生成ASCII艺术字

使用Python生成ASCII艺术字,可以选择是否输出颜色(需要终端支持ANSI转义序列)。同时生成包含ASCII艺术字的C代码。该方法可以用于生成个性化的提示信息,比如系统开机提示暂时不支持生成中文。

1.pyfiglet模块

需要满足Python或者Python3运行环境

1.1 安装

pip安装pyfiglet

1
pip install pyfiglet

1.2 测试命令

打印一个ASCII艺术字体,风格为banner3,内容为RTOS

1
pyfiglet -f banner3 RTOS

pyfiglet命令测试结果

1.3 风格

列出所有可用风格,但是该命令只能获取到风格名称,查看具体的效果需要去figlet网站[1]

1
pyfiglet -l

列出所有包含banner的风格

1
pyfiglet -l | grep banner

2.Python代码

2.1 示例代码

以下提供了一个Demo可以直接运行,该Demo会根据选择的风格以及内容生成并打印ASCII艺术字体,并生成C代码,同级目录会自动生成一个ascii.c文件。且ascii.c可以直接运行,其打印的艺术字体与Python的打印一致。该Demo也可以去github下载[2]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
import pyfiglet

# 选择ASCII艺术字体风格
font = "banner3"
# 需要生成的内容
text = "RTOS"
# 是否需要支持ANSI转义序列
enable_color = 0
# 选择输出颜色
color = "yellow"
# ANSI颜色映射表(可以根据ANSI规范自行)
ansi_map = {
"red" : "\x1b[31m",
"green" : "\x1b[32m",
"yellow" : "\x1b[33m",
"blue" : "\x1b[34m",
"magenta" : "\x1b[35m",
"cyan" : "\x1b[36m",
"reset" : "\x1b[0m"
}
# 目标字符串
result = pyfiglet.figlet_format(text, font=font)
# 如果启用了颜色输出则加入ANSI颜色映射
if enable_color:
result = ansi_map[color] + result + ansi_map["reset"]
# 测试打印效果
print(result)

# 禁止转义
result = repr(result)
# 删除单引号'
result = result.replace("'", "")

# 生成C代码内容
c_code = """
#include <stdio.h>
// 目标字符串
const char *str = "%s";
int main() {
printf("%%s\\n", str);
return 0;
}
"""

# 将目标字符串连接到final_c_code中
final_c_code = c_code % result
# 保存文件
with open("ascii.c", "w") as file:
file.write(final_c_code)

print("C source file saved!")

2.2 运行

建议在VSCode里安装Code Runner插件,可以一键运行Python代码以及C代码。注意,Code Runner需要打开Run in Terminal选项,否则默认的OUTPUT控制台不支持ANSI的序列化显示。

打开Run in Terminal

2.2.1 运行Python文件

将Python示例程序保存为generate.py,在该文件处右键Run Code,观察终端输出的结果,以及同级目录的ascii.c文件是否生成
运行Python程序

2.2.2 运行C文件

右键运行C文件,观察终端输出的结果
运行C程序

3. 进阶

3.1 启用颜色

尝试启用颜色输出,设置enable_color = 1,颜色根据程序里定义好的ansi_map自由选择
启用颜色

3.2 修改风格

修改风格

参考


生成ASCII艺术字
https://blog.gogo.uno/2024/02/21/generate-ascii-art/
作者
Orionxer
发布于
2024年2月22日
更新于
2024年8月4日
许可协议