java 根据用户名生成头像。

先上效果图
在这里插入图片描述
自行根据需求修改代码

package com.space;
import java.awt.*;
import java.awt.geom.RoundRectangle2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.Random;
import java.util.regex.Matcher;
import java.util.regex.Pattern;import javax.imageio.ImageIO;
/*** @author lingzhiying* @title: test.java* @projectName spacepm* @description:  * @date 2019年1月11日*/
public class test {public static void main(String[] args) throws IOException {String name = "新垣结衣";generateImg(name, name);}/*** 绘制字体头像* 如果是英文名,只显示首字母大写* 如果是中文名,只显示最后两个字* @param name* @param outputPath* @param outputName* @throws IOException*/public static void generateImg(String name, String outputName)throws IOException {int width = 100;int height = 100;int nameLen = name.length();String nameWritten;//如果用户输入的姓名少于等于2个字符,不用截取if (nameLen <= 2) {nameWritten = name;} else {//如果用户输入的姓名大于等于3个字符,截取后面一位  可根据需求改长度String first = name.substring(0, 1);if (isChinese(first)) {//截取倒数两位汉字nameWritten = name.substring(nameLen - 1);} else {//截取前面的两个英文字母nameWritten = name.substring(0, 2).toUpperCase();}}String filename = "E:/lzy" + File.separator + outputName + ".jpg";File file = new File(filename);//Font font = new Font("微软雅黑", Font.PLAIN, 30);BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);Graphics2D g2 = (Graphics2D) bi.getGraphics();g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,RenderingHints.VALUE_TEXT_ANTIALIAS_ON);g2.setBackground(getRandomColor());g2.clearRect(0, 0, width, height);g2.setPaint(Color.WHITE);Font font = null;//两个字及以上if(nameWritten.length() >= 2) {font = new Font("微软雅黑", Font.PLAIN, 30);g2.setFont(font);String firstWritten = nameWritten.substring(0, 1);String secondWritten = nameWritten.substring(1, 2);//两个中文 如 言曌if (isChinese(firstWritten) && isChinese(secondWritten)) {g2.drawString(nameWritten, 20, 60);}//首中次英 如 罗Qelse if (isChinese(firstWritten) && !isChinese(secondWritten)) {g2.drawString(nameWritten, 27, 60);//首英,如 AB} else {nameWritten = nameWritten.substring(0,1);}}//一个字if(nameWritten.length() ==1) {//中文if(isChinese(nameWritten)) {font = new Font("微软雅黑", Font.PLAIN, 50);g2.setFont(font);g2.drawString(nameWritten, 25, 70);}//英文else {font = new Font("微软雅黑", Font.PLAIN, 55);g2.setFont(font);g2.drawString(nameWritten.toUpperCase(), 33, 67);}}BufferedImage rounded = makeRoundedCorner(bi, 99);ImageIO.write(rounded, "png", file);}/*** 判断字符串是否为中文* @param str* @return*/public static boolean isChinese(String str) {String regEx = "[\\u4e00-\\u9fa5]+";Pattern p = Pattern.compile(regEx);Matcher m = p.matcher(str);if (m.find())return true;elsereturn false;}/*** 获得随机颜色* @return*/private static Color getRandomColor() {String[] beautifulColors =new String[]{"232,221,203", "205,179,128", "3,101,100", "3,54,73", "3,22,52","237,222,139", "251,178,23", "96,143,159", "1,77,103", "254,67,101", "252,157,154","249,205,173", "200,200,169", "131,175,155", "229,187,129", "161,23,21", "34,8,7","118,77,57", "17,63,61", "60,79,57", "95,92,51", "179,214,110", "248,147,29","227,160,93", "178,190,126", "114,111,238", "56,13,49", "89,61,67", "250,218,141","3,38,58", "179,168,150", "222,125,44", "20,68,106", "130,57,53", "137,190,178","201,186,131", "222,211,140", "222,156,83", "23,44,60", "39,72,98", "153,80,84","217,104,49", "230,179,61", "174,221,129", "107,194,53", "6,128,67", "38,157,128","178,200,187", "69,137,148", "117,121,71", "114,83,52", "87,105,60", "82,75,46","171,92,37", "100,107,48", "98,65,24", "54,37,17", "137,157,192", "250,227,113","29,131,8", "220,87,18", "29,191,151", "35,235,185", "213,26,33", "160,191,124","101,147,74", "64,116,52", "255,150,128", "255,94,72", "38,188,213", "167,220,224","1,165,175", "179,214,110", "248,147,29", "230,155,3", "209,73,78", "62,188,202","224,160,158", "161,47,47", "0,90,171", "107,194,53", "174,221,129", "6,128,67","38,157,128", "201,138,131", "220,162,151", "137,157,192", "175,215,237", "92,167,186","255,66,93", "147,224,255", "247,68,97", "185,227,217"};int len = beautifulColors.length;Random random = new Random();String[] color = beautifulColors[random.nextInt(len)].split(",");return new Color(Integer.parseInt(color[0]), Integer.parseInt(color[1]),Integer.parseInt(color[2]));}/*** 图片做圆角处理* @param image* @param cornerRadius* @return*/public static BufferedImage makeRoundedCorner(BufferedImage image, int cornerRadius) {int w = image.getWidth();int h = image.getHeight();BufferedImage output = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);Graphics2D g2 = output.createGraphics();g2.setComposite(AlphaComposite.Src);g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);g2.setColor(Color.WHITE);g2.fill(new RoundRectangle2D.Float(0, 0, w, h, cornerRadius, cornerRadius));g2.setComposite(AlphaComposite.SrcAtop);g2.drawImage(image, 0, 0, null);g2.dispose();return output;}
}

已经找不到原作者了,如果看到请留言。

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

支付宝小程序serverless---获取用户信息(头像)并保存到云数据库

支付宝小程序serverless—获取用户信息&#xff08;头像&#xff09;并保存到云数据库 博客说明 文章所涉及的资料来自互联网整理和个人总结&#xff0c;意在于个人学习和经验汇总&#xff0c;如有什么地方侵权&#xff0c;请联系本人删除&#xff0c;谢谢&#xff01; 我又回…

湘大 XTU OJ 1260 Completed String 题解(非常详细):建立数组下标和数组元素之间的映射关系 ~scanf

一、链接 1260 Completed String 二、题目 题目描述 给一个字符串&#xff0c;请判断字符串是否出现了所有的英文字母&#xff08;不区分大小写&#xff09;。 输入 每行一个只含英文字母的字符串&#xff0c;长度不超过1000。 输出 每行输出一个样例的结果&#xff0c…

openCV配置+cmake操作记录--Ubuntu 16.04版本

项目需要openCV相关操作,于是找了好多教程,琢磨了好久,写个笔记。 更新ubuntu上的一些库: sudo apt-get update sudo apt-get upgrade 安装一些库:(虽然我现在也不明白这玩意,我是纯小白/(ㄒoㄒ)/~~) sudo apt-get install cmake sudo apt-get install build-essen…

笔记2:openCV打开摄像头显示到QT的QLabel--Ubuntu系统

目的: 通过openCV调用摄像头,把捕捉到的画面显示到QT的QLabel控件上。 听起来很easy的样子,我的coding能力很弱,可以找个我是理学院出身的借口,但现实是谁会听你的借口呢,希望这笔记不是给我未来参考的,而是为了博未来的自己一笑,那样才能说明我是进步的哈。 效果:…

【二叉树】1-5,理论基础、前中后序遍历的递归法和迭代法、层序遍历

理论基础、前中后序遍历的递归法和迭代法、层序遍历 1&#xff0c;二叉树的种类满二叉树完全二叉树二叉搜索树平衡二叉搜索树 2&#xff0c;存储方式链式存储线式存储 3&#xff0c;二叉树的遍历深度优先搜索前序遍历&#xff08;递归法、迭代法&#xff09;中序遍历&#xff0…

fork创建多个子进程

fork创建多个子进程 示例代码 fork1.c #include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <unistd.h>int main(int argc,char **argv) {int i, j;pid_t pid;for (i 0; i < 3; i){pid fork();if (pid < 0){perror(&q…

苹果6换屏多钱_iPhone12屏幕维修多少钱 苹果12换屏价格汇总

苹果iPhone12系列手机如果屏幕坏了要维修换屏的话&#xff0c;需要多少钱呢&#xff0c;官方的换屏价格是多少&#xff0c;这里我们来了解下iPhone12系列手机官方渠道换屏价格。 1、iPhone12保外屏幕维修费用 2149元&#xff0c;iPhone12Pro屏幕维修费用2149元&#xff0c;由于…

合并两个有序链表

就像一个贪吃蛇将两个链表一一的吃进来 class Solution(object):def mergeTwoLists(self, list1, list2):""":type list1: Optional[ListNode]:type list2: Optional[ListNode]:rtype: Optional[ListNode]"""p ListNode(0)cur pwhile list1 a…

如何在CSS中水平居中一个元素?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 使用 margin: 0 auto⭐ 使用 Flexbox 布局⭐ 使用绝对定位和负边距⭐ 使用表格布局⭐ 使用网格布局⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅…

Flink CDC系列之:TiDB CDC 导入 Elasticsearch

Flink CDC系列之&#xff1a;TiDB CDC 导入 Elasticsearch 一、通过docker 来启动 TiDB 集群二、下载 Flink 和所需要的依赖包三、在TiDB数据库中创建表和准备数据四、启动Flink 集群&#xff0c;再启动 SQL CLI五、在 Flink SQL CLI 中使用 Flink DDL 创建表六、Kibana查看Ela…

b站 APP 产品体验报告

参考链接 https://www.jianshu.com/p/3dda6a6f050e 虽然B站在很多情况下被认为其主要的用户群体是ACG&#xff08;Animation、Comic、Game&#xff09;爱好者&#xff0c;但现在随着其内容不断丰富&#xff0c;用户体验不断改良&#xff0c;用户群体也随之拓展。因此&#xff0…

最简单版B站视频下载

最近想在电脑端缓存一些b站的视频&#xff0c;发现缓存不了&#xff0c;手机端是可以缓存的&#xff0c;但是比如有些课程&#xff0c;还是直接在电脑缓存比较方便些&#xff0c;整了一个小时左右&#xff0c;终于解决了&#xff0c;今天出一篇博客分享一下&#xff0c;有需要的…

基于Cordova的 B站用户直播闹钟app(安卓版)

前言 本项目基于Cordova开发&#xff0c;打包的apk支持Android9&#xff0c;主要功能为 监听b站用户直播情况&#xff0c;开播进行闹钟提示 ps&#xff1a;目前版本还是有蛮多问题的&#xff0c;如有遇到可以及时反馈&#xff0c;我会想办法进行修复。 源码下载 码云 GitHub…

Android Compose——一个简单的Bilibili APP

Bilibili移动端APP 简介依赖效果登录效果WebView 自定义TobRow的Indicator大小首页推荐LazyGridView使用Paging3热门 排行榜搜索模糊搜索富文本 搜索结果视频详情合集 信息Coroutines进行网络请求管理&#xff0c;避免回调地狱添加suspendwithContext Git项目链接末 简介 此De…

仿B站web,APP,后台

体验地址 web端&#xff1a;http://82.157.168.147/ 安卓端&#xff1a;http://82.157.168.147:7000/bilibili/phone/app.html 测试账号&#xff1a;17627286393 密码:123456 仅测试使用&#xff0c;推荐使用自己的手机号&#xff0c;否则部分功能部分使用&#xff0c;请不要用…

使用 LangChain 构建 LLM 应用详细教程(附python代码演练)

介绍 欢迎来到语言处理的未来&#xff01;在一个语言是连接人与技术的桥梁的世界中&#xff0c;自然语言处理&#xff08;NLP&#xff09;的进步为我们带来了令人难以置信的机会。其中一个重要的进步是革命性的语言模型&#xff0c;即大型语言模型&#xff08;LLM&#xff09;&…

仿B站APP

模仿B站开发的安卓APP(个人非美工&#xff0c;对颜色&#xff0c;图标搭配较懒都使用的一些占位图标&#xff0c;只完成了部分功能) 多图预警 侧边栏只做了效果使用的假数据 直播界面只有直播数据是实时爬取的&#xff0c;其他没有做爬取&#xff0c;只做了效果(轮播图的数据…

使用fusion app制作b站app

使用fusion app&#xff08;以下简称FA&#xff09;将b站网页版做成app 项目创建 打开FA&#xff0c;首页是已经创建过的项目&#xff0c;点击右下角的加号新建一个项目 创建一个标签栏模板 创建后就会进入我们的项目编辑页面 点击右上角的三角形就可以预览项目 现在我们的项…

LeetCode--HOT100题(28)

目录 题目描述&#xff1a;2. 两数相加&#xff08;中等&#xff09;题目接口解题思路代码 PS: 题目描述&#xff1a;2. 两数相加&#xff08;中等&#xff09; 给你两个 非空 的链表&#xff0c;表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的&#xff0c;并且…

【C语言】小游戏-三字棋

大家好&#xff0c;我是深鱼~ 目录 一、游戏介绍 二、文件分装 三、代码实现步骤 1.制作简易游戏菜单 2.初始化棋盘 3.打印棋盘 4.玩家下棋 5.电脑随机下棋 6.判断输赢 7.判断棋盘是否满了 四、完整代码 game.h(相关函数的声明&#xff0c;整个代码要引用的头文件以及宏…