文章目录

  • 前言
  • 一、先上最终效果图
  • 二、直接上源码
    • 1.绘制字体头像
    • 2.判断字符串是否为中文
    • 3.获得随机颜色
    • 4.图片做圆角处理
  • 最后可以写一个main方法调试一下

前言

在用户注册登录的时候,一般要给新用户一个头像,突然想到钉钉的用户默认头像,于是准备模仿一下


一、先上最终效果图

二、直接上源码

1.绘制字体头像

如果是英文名,只显示首字母大写
如果是中文名,只显示最后两个字

    /*** 绘制字体头像* 如果是英文名,只显示首字母大写* 如果是中文名,只显示最后两个字** @param name* @param outputPath 文件路径* @param outputName 文件名* @param fillet     圆角大小*/public static void generateImg(String name, String outputPath, String outputName, Integer fillet) 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 - 2);} else {// 截取前面的两个英文字母nameWritten = name.substring(0, 2).toUpperCase();}}String filename = outputPath + 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);}// 首中次英 如 张Selse if (isChinese(firstWritten) && !isChinese(secondWritten)) {g2.drawString(nameWritten, 27, 60);}// 首英,如 ZSelse {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, fillet);ImageIO.write(rounded, "png", file);}

2.判断字符串是否为中文

    /*** 判断字符串是否为中文** @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;else return false;}

3.获得随机颜色

       /*** 获得随机颜色** @return*/private static Color getRandomColor() {String[] beautifulColors = new String[]{"2,168,250"};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]));}

4.图片做圆角处理

       /*** 图片做圆角处理** @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;}

最后可以写一个main方法调试一下

    public static void main(String[] args) throws IOException {String name = "汪杰";//name 姓名  outputPath 存放路径 fillet 圆角大小generateImg(name, "D:/", name, 30);}

Java根据姓名生成头像(类似钉钉)相关推荐

  1. java根据名称生成头像_js实现文字头像的生成代码

    使用canvas画出文字就好啦 function gen_text_img(size, s) { let colors = [ "rgb(239,150,26)", 'rgb(25 ...

  2. java根据名称生成头像_教你用go freetype根据用户昵称生成头像

    最近需要为用户服务添加一些新功能,其中就包括在注册时根据用户昵称生成头像这一点. 由于用户服务是用golang写的,google来google去都只找到freetype一个比较简单好用的库,其他比如I ...

  3. java 根据用户名生成头像。

    先上效果图 自行根据需求修改代码 package com.space; import java.awt.*; import java.awt.geom.RoundRectangle2D; import ...

  4. 根据文字生成头像(类似钉钉头像) 分享一个好用的头像生成API--UI Avatars

    通过UI Avatars可以通过文字生成类似钉钉默认头像的图片,微信小程序.html等前端场景都可以使用,微信小程序中亲测有效 原网页如下,具体的参数在网页中可以查到 Generate avatars ...

  5. JAVA模仿钉钉生成钉钉群组头像

    钉钉群组头像最多4张,根据大神的java实现仿微信群组合头像改的,地址:https://www.cnblogs.com/zovon/p/4345501.html import java.awt.Col ...

  6. php 钉钉头像生成,从零开始打造专属钉钉机器人

    官方定义如下: 群机器人是钉钉群的高级扩展功能.群机器人可以将第三方服务的信息聚合到群聊中,实现自动化的信息同步.目前,大部分机器人在添加后,还需要进行Webhook配置,才可正常使用(配置说明详见操 ...

  7. 自动生成带昵称的头像(仿照钉钉头像)

    很多场合都会出现默认头像,比如刚注册的账户还未自定义头像,显示就是默认头像,这种头像一般都很丑,想到钉钉那种风格还挺特别的,仿照写一个. 废话不多说,直接上代码. import java.awt.*; ...

  8. java代码:通过名称生成企业名称或者是个人的名字生成头像

    我们经常会看看钉钉这个办公软件,如果你没有传头像上去,他会默认生成一个带有你的名字的头像,这个是怎么生成的呢,有很多需求里面可能也会有 这个要求,就是通过一个名词生成一个头像,接下来我和大家说一下具体 ...

  9. 钉钉需要什么java知识_Java钉钉开发_01_开发前的准备

    源码已上传GitHub:传送门 一.准备事项 1.1  一个能在公网上访问的项目: 1.2  一个钉钉账号 1.3 创建一个应用 登录钉钉后台->工作台->自建应用 二.钉钉的配置参数 2 ...

最新文章

  1. 自监督学习简介以及在三大领域中现状
  2. Squid正向代理矩阵
  3. 深度解析iPhone Category用法
  4. vue 倒计时 插件_vue中实现倒计时组件与毫秒效果
  5. P1247 取火柴游戏
  6. 四阶龙格库塔c语言,四阶龙格库塔算法的C语言实现
  7. 超方便、最简单版本:java 邮件发送 (半分钟写完代码)
  8. Java中private、protected、public和default的区别
  9. 牛客暑期多校第五场A:gpa题解(简单01分数规划)
  10. Cadence Orcad Capture导出网表的方法图文教程及视频演示
  11. svn客户端(Windows版本)
  12. 第一章 : JVM与体系结构
  13. ORAN C平面 Section Type 3
  14. 业务单据堆积如山?如何提升会计做账效率?
  15. Python单利实现
  16. 计算机课程设计参考文献,计算机课程设计专著参考文献 计算机课程设计论文参考文献哪里找...
  17. 3D机房前端学习笔记
  18. 自己动手写数据库系统:容灾恢复原理和容灾恢复日志的设计
  19. 源码阅读技巧总结-Android
  20. 互联网指标体系构建及分析方法

热门文章

  1. 专访木瓜移动刘凡:木瓜移动如何为行业聚能?
  2. webscoket推送rtsp视频流
  3. 零基础上手unity VR开发【Oculus账号体系准备】
  4. Android按钮 button
  5. 运用Nginx搭建一个简单的个人网站
  6. php转换北京时间,php实现的太平洋时间和北京时间互转的自定义函数分享
  7. 热门框架系列 (二) -- SpringMvc的父子容器,SpringBoot是否有父子容器?
  8. 苹果开机时有Android,还是13香?曝苹果新机影像系统有巨大升级,安卓厂商:就这?...
  9. PHP后门隐藏与维持技巧
  10. 计算机三级网络技术通过宝典