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

说明:有的项目启动时,会在控制台输出下面的图案。本文介绍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           # 设置字符在图片中的高度,初始值为0count = 0begin_time = time.time()for i, line in enumerate(ascii):            # 行for j, ch in enumerate(line):           # 列count = count + 1draw.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.颜色}),如下:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/798896.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Unity每日一记】鼠标相关API

👨‍💻个人主页:元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏:uni…

Linux初学(十七)redis

一、简介 redis就是一个内存数据库 redis中的数据,都是保存在内存中 端口:6379 二、安装redis 方法一:编译安装 方法二:yum安装-epel 第一步:配置epel源 详见:http://t.csdnimg.cn/AFl1K第二步&#xff1a…

GaN肖特基势垒二极管(SBD)的多阴极应用建模与参数提取

GaN Schottky Barrier Diode (SBD) Modeling and Parameter Extraction for Multicathode Application(TED 24年) 摘要 本文提出了一种适用于多阴极应用的紧凑型可扩展GaN肖特基二极管大信号模型。详细给出了外在和内在模型参数的可扩展规则。实验和理…

Stm32 HAL库 访问内部flash空间

Stm32 HAL库 访问内部flash空间 代码的部分串口配置申明文件main函数 在一些时候,需要存储一些数据,但是又不想接外部的flash,那我们可以知道,其实还有内部的flash可以使用, 需要注意的是内部flash,读写次数…

书生浦语训练营二期第三次作业

文章目录 基础作业1. 在茴香豆 Web 版中创建自己领域的知识问答助手第一轮对话第二轮对话第三轮对话第四轮对话第五轮对话 2.在 InternLM Studio 上部署茴香豆技术助手修改配置文件创建知识库运行茴香豆知识助手 基础作业 1. 在茴香豆 Web 版中创建自己领域的知识问答助手 我…

神经网络中的超参数调整

背景 在深度神经网络学习和优化中,超参数调整一项必备技能,通过观察在训练过程中的监测指标如损失loss和准确率来判断当前模型处于什么样的训练状态,及时调整超参数以更科学地训练模型能够提高资源利用率。在本研究中使用了以下超参数&#x…

iOS 17.5系统或可识别并禁用未知跟踪器,苹果Find My技术应用越来越合理

苹果公司去年与谷歌合作,宣布将制定新的行业标准来解决人们日益关注的跟踪器隐私问题。苹果计划在即将发布的 iOS 17.5 系统中加入这项提升用户隐私保护的新功能。 科技网站 9to5Mac 在苹果发布的 iOS 17.5 开发者测试版内部代码中发现了这项反跟踪功能的蛛丝马迹…

XML HTTP传输 小结

what’s XML XML 指可扩展标记语言(eXtensible Markup Language)。 XML 被设计用来传输和存储数据,不用于表现和展示数据,HTML 则用来表现数据。 XML 是独立于软件和硬件的信息传输工具。 应该掌握的基础知识 HTMLJavaScript…

使用pytorch构建有监督的条件GAN(conditional GAN)网络模型

本文为此系列的第四篇conditional GAN,上一篇为WGAN-GP。文中在无监督的基础上重点讲解作为有监督对比无监督的差异,若有不懂的无监督知识点可以看本系列第一篇。 原理 有条件与无条件 如图投进硬币随机得到一个乒乓球的例子可以看成是一个无监督的GAN&…

从0到1搭建文档库——sphinx + git + read the docs

sphinx git read the docs 目录 一、sphinx 1 sphinx的安装 2 本地构建文件框架 1)创建基本框架(生成index.rst ;conf.py) conf.py默认内容 index.rst默认内容 2)生成页面(Windows系统下&#xf…

实战webSocket压测(三)Jmeter真实接口联调

背景: 接口地址为:ws://sunlei.demo 接口说明:websocket接口,首次连接,通过Text请求设置开启标志,然后通过wav文件流传输,达到后端服务可以根据传输信息进行解析满足指定标准后,web…

锂电池算法学习集合---基于matlab/simulink的电池参数辨识、充放电、SOC估计算法。

整理了锂电池的多种算法合集:涵盖电动汽车Simulink模型、电动汽车动力电池SOC估算模型、动力电池及电池管理系统BMS。 电动汽车动力电池SOC估算模型含有:电池参数辨识模型、电池的充放电数据、电池手册、卡尔曼滤波电池SOC文献、卡尔曼滤波算法的锂电池SOC估算模型…

C++ | Leetcode C++题解之第16题最接近的三数之和

题目&#xff1a; 题解&#xff1a; class Solution { public:int threeSumClosest(vector<int>& nums, int target) {sort(nums.begin(), nums.end());int n nums.size();int best 1e7;// 根据差值的绝对值来更新答案auto update [&](int cur) {if (abs(cur…

Word wrap在计算机代表的含义(自动换行)

“Word wrap”是一个计算机术语&#xff0c;用于描述文本处理器在内容超过容器边界时自动将超出部分转移到下一行的功能。在多种编程语言和文本编辑工具中&#xff0c;都有实现这一功能的函数或选项。 在编程中&#xff0c;例如某些编程语言中的wordwrap函数&#xff0c;能够按…

甘特图/横道图制作技巧 - 任务组

在甘特图中通过合理的任务分组可以让项目更加清晰&#xff0c;修改也更方便。 列如下面的甘特图一眼不太容易看清楚整体的进度。或者需要把所有的任务整体的延迟或者提前只能这样一个一个的任务调整&#xff0c;就比较麻烦。 通过给任务分组&#xff0c;看这上面整体的进度就…

【运输层】传输控制协议 TCP

目录 1、传输控制协议 TCP 概述 &#xff08;1&#xff09;TCP 的特点 &#xff08;2&#xff09;TCP 连接中的套接字概念 2、可靠传输的工作原理 &#xff08;1&#xff09;停止等待协议 &#xff08;2&#xff09;连续ARQ协议 3、TCP 报文段的首部格式 &#xff08;1…

Sundar Pichai 谈巨型公司创新挑战及他今年感到兴奋的事物

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

10 Python进阶:MongoDB

MongoDb介绍 MongoDB是一个基于分布式架构的文档数据库&#xff0c;它使用JSON样式的数据存储&#xff0c;支持动态查询&#xff0c;完全索引。MongoDB是NoSQL数据库的一种&#xff0c;主要用于处理大型、半结构化或无结构化的数据。以下是MongoDB数据库的一些关键特点和优势&a…

路由器对数据包的处理过程分析笔记

虽然TCP-IP协议中传输数据会在各个路由器再次经过物理层、链路层、网络层的解封装、加工、封装、转发&#xff0c;但是对于两个主机间的运输层&#xff0c;在逻辑上&#xff0c;应用进程是直接通信的。 路由器主要工作在网络层&#xff0c;但它也涉及到物理层和链路层的一些功能…

Android详细介绍POI进行Word操作(小白可进)

poi-tl是一个基于Apache POI的Word模板引擎&#xff0c;也是一个免费开源的Java类库&#xff0c;你可以非常方便的加入到你的项目中&#xff0c;并且拥有着让人喜悦的特性。 一、使用poi前准备 1.导入依赖&#xff1a; 亲手测过下面Android导入POI依赖的方法可用 放入这个 …