如何自定义项目启动时的图案

本文介绍了如何在SpringBoot项目中自定义启动时的控制台图案,通过Python代码实现图片转为ASCII艺术,并指导读者在Resource文件夹设置文本文件以展示启动画面。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

说明:有的项目启动时,会在控制台输出下面的图案。本文介绍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.颜色}),如下:

在这里插入图片描述

### 如何自定义 Spring Boot 启动 Banner #### 使用 `banner.txt` 文件定制启动图标 为了使 Spring Boot 应用程序在启动时展示特定的艺术字样式作为 Banner,可以在项目的资源目录 (`src/main/resources`) 下创建名为 `banner.txt` 的文件[^3]。 ```plaintext _ __ _______ ___ ____ | |__ / /_|___ / / _ \ / ___| | '_ \\ '_ \ |_ \ | (_) | | | |_) | (_) |__) |_____\\__, | |____ |_.__/ \___/____(_) |___/\____(_) ``` 上述 ASCII 艺术字符代表了一种可能的自定义 Banner 设计。当应用运行时,这段文字将会被打印出来替代默认的 Spring Boot Logo。 #### 动态生成 Banner 除了静态文本外,还可以通过编程方式实现更灵活多变的 Banner 展现逻辑。这可以通过继承 `org.springframework.boot.Banner` 接口并重写其方法来完成,在主类中的配置如下所示: ```java import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class MyApplication { public static void main(String[] args) { SpringApplication app = new SpringApplication(MyApplication.class); app.setBanner(new CustomBanner()); app.run(args); } } ``` 其中 `CustomBanner` 类实现了个性化的输出效果,比如基于时间戳变化的内容或是随机选取的不同风格图案等。 #### 控制台色彩增强 为了让终端上的视觉呈现更加吸引人,可以利用 ANSI 颜色编码给 Banner 添加颜色支持。例如使用 `AnsiColor.RED`, `AnsiColor.GREEN` 等枚举成员指定前景色;也可以配合背景色一起调整整体外观[^5]。 ```java import org.springframework.boot.ansi.AnsiColor; import org.springframework.boot.ansi.AnsiOutput; // ... @Override public void printBanner(Environment environment, Class<?> sourceClass, PrintStream out) { String bannerText = "Welcome to MyApp!"; out.println(AnsiOutput.toString(AnsiColor.YELLOW, bannerText)); } ``` 此代码片段展示了如何将黄色应用于欢迎消息上。 #### 关闭 Banner 显示 如果不需要任何 Banner 输出,则可通过调用 `SpringApplication` 实例的方法禁用该功能。具体来说就是设置 `Banner.Mode.OFF` 参数值以阻止 Banner 的渲染过程[^4]。 ```java app.setBannerMode(Banner.Mode.OFF); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

何中应

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值