通过我们在启动spring
项目或者其他中间件和小工具的时候,会遇到输出一些有意思的图案,于是也挺好奇这些是如何制作的,于是在网上找到了以下几种实现的工具以及网站可以直接制作,然后在程序启动的时候打印出来这些字符。整理一下分享给大家。
字符图案
我们在使用一些开源软件的时候,启动打开的字符图形很好看,例如下面的字符。于是搜索到了一些网站和工具来实现:
代码语言:javascript复制"""
_ _ _
| | | | ( )
| | ___ | |_|/ ___ __ _ ___
| | / _ | __| / __| / _` | / _
| |____ | __/ | |_ __ | (_| | | (_) |
_____/ ___| __| |___/ __, | ___/
__/ |
|___/
"""
网站taag[1]
可以随意输入内容,调节字体、宽、高。
Ascii图像生成器
同时作者还有另外一个ascii图像生成器[2]:
如果想要在python中输出,只需要把上面的字符串赋值然后使用print
函数打印即可,需要用多行注释来包含这些字符:
命令行工具figlet[3]
所以首先来安装一下figlet
brew install figlet
figlet
输出的图形随着使用的字体的变化而变化,所以可以参考`figlet官网`[4]找到合适的字体,下载后存放在/usr/local/Cellar/figlet/2.x.x/share/figlet/fonts
路径下即可
#输出斜体
figlet -f slant CloudNative
________ ___ __ __ _
/ ____/ /___ __ ______/ / | / /___ _/ /_(_) _____
/ / / / __ / / / / __ / |/ / __ `/ __/ / | / / _
/ /___/ / /_/ / /_/ / /_/ / /| / /_/ / /_/ /| |/ / __/
____/_/____/__,_/__,_/_/ |_/__,_/__/_/ |___/___/
图片图案
在python中显示字符串图片
这种方法的主要原理是利用一组视觉密度不同的字符,按照灰度去替换每一个像素:
- 可以将图像的灰度定义为不同的级别来显示:
gscale1 = "$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/|()1{}[]?-_ ~i!lI;:,"^.
gscale2 = "@%#* =-:. "
这种灰度级别少一些
- 然后读入图像,将图像映射为长宽等比的矩阵
- 然后将颜色灰度值映射到定义的灰度级别上来
import sys
import cv2
grays = "@%#* =-:. " #由于控制台是白色背景,所以先密后疏/黑色背景要转置一下
gs = 10 #10级灰度
#grays2 = "$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/|()1{}[]?-_ ~i!lI;:,"^.` "
#gs2 = 67
img = cv2.imread('demo.png',0) #读入灰度图
#宽(列)和高(行数)
w = img.shape[1]
h = img.shape[0]
ratio = float(w)/h #调整长宽比 (**注:此比例为win cmd,ratio需要根据不同终端的字符长宽调整)
scale = w // 50 #缩放尺度,向下取整,每50个像素取一个 值越小图越小(scale 越大)
for y in range(0, h, int(scale*ratio)): #根据缩放长度 遍历高度 y对于h,x对应w
for x in range(0, w, scale): #根据缩放长度 遍历宽度
idx=img[y][x] * gs // 255 #获取每个点的灰度 根据不同的灰度填写相应的 替换字符
if idx==gs:
idx=gs-1
sys.stdout.write(grays[idx]) #写入控制台
sys.stdout.write('n')
sys.stdout.flush()
执行以上代码之前,你需要先安装一下pip install opencv-python
找一个图片,修改图片的路径为脚本所在的目录,命名为demo.png
,图片如下:
然后执行完Python脚本后,看到处理后的结果为:
看起来还不错哦,哈哈
输出彩色的图像
这里可以在微信公众号后台回复彩蛋
即可获取输出彩色图像的Python脚本,这里不再详细展开描述。效果图如下:
参考资料
[1] http://patorjk.com/software/taag/
[2] http://patorjk.com/arial-ascii-art: http://patorjk.com/arial-ascii-art
[3] http://www.figlet.org/
[4] http://www.figlet.org/examples.html