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

说明:有的项目启动时,会在控制台输出下面的图案。本文介绍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.rhkb.cn/news/300653.html

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

相关文章

动态规划刷题(算法竞赛、蓝桥杯)--线段(线性DP)

1、题目链接&#xff1a;P3842 [TJOI2007] 线段 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) #include <bits/stdc.h> using namespace std; const int N20010; int a[N][2],f[N][2]; //a[i][0]表示l[i],a[i][1]表示r[i] int dis(int a,int b){return abs(a-b); } int…

基于Swin Transformers的乳腺癌组织病理学图像多分类

乳腺癌的非侵入性诊断程序涉及体检和成像技术&#xff0c;如乳房X光检查、超声检查和磁共振成像。成像程序对于更全面地评估癌症区域和识别癌症亚型的敏感性较低。 CNN表现出固有的归纳偏差&#xff0c;并且对于图像中感兴趣对象的平移、旋转和位置有所不同。因此&#xff0c;…

flutter升级3.10.6Xcode构建报错

flutter sdk 升级Xcode报错收集&#xff0c;错误信息如下&#xff1a; Error (Xcode): Cycle inside Runner; building could produce unreliable results.没问题版本信息&#xff1a; Xcode&#xff1a;15.3 flutter sdk &#xff1a;3.7.12 dart sdk&#xff1a;2.19.6 …

考研||考公||就业||其他?-------愿不再犹豫

大三下了&#xff0c;现在已经开学一个多月了&#xff0c;在上个学期的时候陆陆续续吧周围有的行动早的人已经开始准备考研了&#xff0c;当然这只是下小部分人吧&#xff0c;也有一部分人是寒假可能就开始了&#xff0c;更多的则是开学的时候&#xff0c;我的直观感受是图书馆…

AI大模型下的策略模式与模板方法模式对比解析

​&#x1f308; 个人主页&#xff1a;danci_ &#x1f525; 系列专栏&#xff1a;《设计模式》《MYSQL应用》 &#x1f4aa;&#x1f3fb; 制定明确可量化的目标&#xff0c;坚持默默的做事。 &#x1f680; 转载自热榜文章&#xff1a;设计模式深度解析&#xff1a;AI大模型下…

[挖坟]如何安装Shizuku和LSPatch并安装模块(不需要Root,非Magisk)

2023年12月13日&#xff0c;LSPatch 停止维护 2024年1月8日&#xff0c;LSPosed 停止维护 2024年1月8日&#xff0c;ZygiskNext 停止维护 2024年1月9日&#xff0c;KernelSU 停止维护 这里使用 ColorOS 14 演示&#xff0c;其他品牌手机类似 安装 Shizuku 官网: https://shiz…

报修小程序怎么建立?维修服务行业的智能化升级

在这个数字化飞速发展的时代&#xff0c;维修服务行业也在经历着前所未有的变革。消费者对于服务的期待不再局限于传统的电话预约或线下等待&#xff0c;而是希望能够通过更加智能、便捷的途径解决日常生活中的维修问题。在这样的背景下&#xff0c;报修小程序应运而生&#xf…

性能分析-CPU知识

目录 CPU知识 cpu组成 查看cpu信息&#xff1a; top命令中 cpu相关&#xff1a; top命令看到系统负载&#xff1a; CPU负载 IO负载 上下文&#xff1a; CPU的寄存器和程序计数器----在cpu的控制器中 实战演示分析 top命令分析 arthas工具 进程上下文切换高的问题分析…

【MIT6.S081】Lab1: Xv6 and Unix utilities(详细解答版)

实验内容网址&#xff1a;https://xv6.dgs.zone/labs/requirements/lab1.html Sleep 关键点&#xff1a;函数参数判断、系统函数调用 思路&#xff1a; 通过argc来判断函数参数是否正确&#xff0c;通过atoi函数来讲字符串转化为整型&#xff0c;调用sleep函数后退出程序。 代…

OpenAI Sora:浅析文生视频模型Sora以及技术原理简介

一、Sora是什么&#xff1f; Sora官方链接&#xff1a;https://openai.com/sora 视频模型领头羊Runway Gen 2、Pika等AI视频工具&#xff0c;都还在突破几秒内的连贯性&#xff0c;而OpenAI&#xff0c;已经达到了史诗级的纪录。 OpenAI&#xff0c;永远快别人一步&#xff0…

C++的List类(一):List类的基本概念

目录 前言 List类的基本概念 List的构造函数 List类迭代器的使用 List的功能 List的元素访问 List与vector比较 前言 vector的insert和erase都会导致迭代器失效list的insert不会导致迭代器失效&#xff0c;erase会导致迭代器失效 insert导致失效的原因是开辟了新空间后…

【氮化镓】在轨实验研究辐射对GaN器件的影响

【Pioneering evaluation of GaN transistors in geostationary satellites】 摘要&#xff1a; 这篇论文介绍了一项为期6年的空间实验结果&#xff0c;该实验研究了在地球静止轨道上辐射对氮化镓&#xff08;GaN&#xff09;电子元件的影响。实验使用了四个GaN晶体管&#xf…

解决前端精度丢失问题:后端Long类型到前端的处理策略

在Web开发中&#xff0c;我们经常遇到前后端数据类型不匹配的问题&#xff0c;特别是当后端使用大数据类型如Long时&#xff0c;前端由于JavaScript的数字精度限制&#xff0c;可能导致精度丢失。本文将深入探讨这个问题&#xff0c;并提供两种有效的解决方法。 一、问题背景 …

Java: LinkedList的模拟实现

一、双向链表简介 上一篇文章我介绍了单向链表的实现&#xff0c;单向链表的特点是&#xff1a;可以根据上一个节点访问下一个节点&#xff01;但是&#xff0c;它有个缺点&#xff0c;无法通过下一个节点访问上一个节点&#xff01;这也是它称为单向链表的原因。 那么&#x…

Tomcat的安装

Tomcat的网址https://tomcat.apache.org/ 点击进去之后的左边可以选择要下载的版本 可以通过下面的which version来进行确定你当前的jdk版本适配的Tomact版本 点进去之后 我的Tomcat适配8版本 点击Core的ZIP进行下载。 下载之后会给一个压缩文件将其进行解压随 最终呈现出这…

c++20协程详解(四)

前言 到这就是协程的最后一节了。希望能帮到大家 代码 到这里我们整合下之前二、三节的代码 #include <coroutine> #include <functional> #include <chrono> #include <iostream> #include <thread> #include <mutex> #include <me…

配置vscode用于STM32编译,Debug

配置环境参考&#xff1a; Docs 用cubemx配置工程文件&#xff0c;用VScode打开工程文件。 编译的时候会有如下报错&#xff1a; vscode出现process_begin :CreateProcess failed 系统找不到指定文件 解决方案&#xff1a;在你的makefile中加上SHELLcmd.exe就可以了 参考…

nest.js + sms 实现短信验证码登录

文章目录 一、前言1、方案概述 二、教程1、阿里云配置&#xff08;1&#xff09;购买短信服务&#xff08;2&#xff09;、短信测试&#xff08;3&#xff09;、资质申请&#xff08;4&#xff09;、通用设置 2、获取API代码示例3、运行工程代码 一、前言 最近做些网站的时候&…

蓝桥杯刷题-12-公因数匹配-数论(分解质因数)不是很理解❓❓

蓝桥杯2023年第十四届省赛真题-公因数匹配 给定 n 个正整数 Ai&#xff0c;请找出两个数 i, j 使得 i < j 且 Ai 和 Aj 存在大于 1 的公因数。 如果存在多组 i, j&#xff0c;请输出 i 最小的那组。如果仍然存在多组 i, j&#xff0c;请输出 i 最小的所有方案中 j 最小的那…

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

题目&#xff1a; 题解&#xff1a; class Solution {public int threeSumClosest(int[] nums, int target) {Arrays.sort(nums);int n nums.length;int best 10000000;// 枚举 afor (int i 0; i < n; i) {// 保证和上一次枚举的元素不相等if (i > 0 && nums…