说明:有的项目启动时,会在控制台输出下面的图案。本文介绍Spring Boot项目如何自定义项目启动时的图案;
生成字符图案
首先,找到一张需要设置的图片,使用下面的代码,将图片转为字符文件;
import time
import numpy as np
from PIL import Image, ImageDraw, ImageFont
import os
# 设置字符的宽度与像素的比例,即一个像素对应多少个字符
sample_rate = 0.1250
# 图片缩放比例
reduce_rate = 0.5
# 将图片转换为字符图片
def ascii_art(file):
# 打开这个图片
im = Image.open(file)
# 加载字体样式和设置字体大小
font = ImageFont.truetype("SourceCodePro-Bold.ttf", size=14)
# 得出字符的纵横比
aspect_ratio = font.getbbox("x")[2] / font.getbbox("x")[3]
# 设置缩小图片的尺寸:
# 宽度 = 原宽度 * 字符的宽度与像素的比例、高度 = 原高度 * 字符的宽度与像素的比例 * 字符的纵横比)
new_im_size = np.array(
[im.size[0] * sample_rate * reduce_rate, im.size[1] * sample_rate * aspect_ratio * reduce_rate]
).astype(int)
# 缩小图像
im = im.resize(new_im_size)
# 转换为灰度图像
im = im.convert("L")
# 转换为numpy数组以进行图像处理
im = np.array(im)
# 设置字符集
symbols = np.array(list(" ^->(LYXH0@M"))
# symbols = np.array(list(" ^>LX0M"))
# 将灰阶值映射到字符集
if im.max() != im.min():
im = (im - im.min()) / (im.max() - im.min()) * (symbols.size - 1)
# 生成ascii艺术
ascii = symbols[im.astype(int)]
# 创建用于绘制ascii文本的输出图像
letter_size = font.getbbox("x")[2], font.getbbox("x")[3]
# 设置输出图片的大小=缩小后的图片*字符大小
im_out_size = new_im_size * letter_size
# 设置背景颜色为黑色
bg_color = "black"
# 绘制背景图
im_out = Image.new("RGB", tuple(im_out_size), bg_color)
# 创建一个绘图对象
draw = ImageDraw.Draw(im_out)
# 逐个字符绘制
y = 0 # 设置字符在图片中的高度,初始值为0
count = 0
begin_time = time.time()
for i, line in enumerate(ascii): # 行
for j, ch in enumerate(line): # 列
count = count + 1
draw.text((letter_size[0] * j, y), ch[0], font=font)
y += letter_size[1]
end_time = time.time()
print('单张图片用时:%d秒' % (end_time - begin_time))
# 保存到一个文本文件里
with open(file + ".txt", "w") as f:
f.write("\n".join(["".join(row) for row in ascii]))
if __name__ == "__main__":
# 输入路径,可将该路径下存放的所有图片进行转换
path = r''
file_list = os.listdir(path)
for file in file_list:
ascii_art(path + '\\' + file)
如下,是图片转换后的字符文件;
代码详细说明参考我之前写的这篇文章;
- 挑战做出全网最牛逼的字符动画
项目中设置
在Resource文件夹下,创建一个“banner.txt”文本文件。banner是横幅的意思,文件里的内容会在项目启动时展示在控制台中,如下:
启动项目;
可在settings里,将字体行高设置为1.0,这样图案不会被拉伸,另外可以在banner.txt里设置字符的颜色(${AnsiColor.颜色}
),如下: