Java实现根据姓名生成头像(钉钉样式)

头像生成器代码如下:

java 复制代码
package com.hua.util;

import org.apache.commons.lang3.StringUtils;

import javax.imageio.ImageIO;
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.UUID;

/**
 * @author: zhengzhonghua
 * @date: 2023/3/16 13:23
 * @description: 头像生成器
 */
public class HeadGeneration {
    /**
     * @author: zhengzhonghua
     * @date: 2023/3/16 13:24
     * @description: 头像生成
     * @param name 用户名称
     * @return 访问图片的路径 localhost:8082/img/
     */
    public static String generateImg(String name) throws IOException {
        int nameLen = name.length();
        //定义最后在图片上显示的姓名
        String nameWritten;
        if (nameLen <= 2) {
            nameWritten = name;
        } else {
            //如果用户姓名大于三位,截取后两位
            nameWritten = StringUtils.right(name, 2);
        }
        String uuid = UUID.randomUUID().toString().replace("-","");
        //文件名(路径+uuid+.jpg)
        String fileName = Const.HEAD_IMAGE_URL + uuid+".jpg";
        File file = new File(fileName);
        //生成图片
        BufferedImage bi = new BufferedImage(100, 100, 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, 100, 100);
        g2.setPaint(Color.WHITE);
        Font font = null;
        // 两个字及以上
        if (nameWritten.length() >= 2) {
            font = new Font("微软雅黑", Font.PLAIN, 30);
            g2.setFont(font);
            g2.drawString(nameWritten, 20, 60);
        }
        // 一个字
        if (nameWritten.length() == 1) {
            // 中文
            font = new Font("微软雅黑", Font.PLAIN, 50);
            g2.setFont(font);
            g2.drawString(nameWritten, 25, 70);

        }
        //图片做圆角处理
        BufferedImage rounded = makeRoundedCorner(bi, Const.HEAD_IMAGE_Radius);
        ImageIO.write(rounded, "png", file);
        return Const.serverUrl+uuid+".jpg";
    }

    /**
     * @author: zhengzhonghua
     * @date: 2023/3/16 13:32
     * @description: 生成随机颜色
     */
    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]));
    }

    /**
     * @author: zhengzhonghua
     * @date: 2023/3/16 13:39
     * @description: 图片做圆角处理
     */
    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;
    }

}
相关推荐
XIAEE22 分钟前
转生到儿童编程异世界:我用 Vue 和 Scratch 建了一座 DREAM 学院
java·spring
XIAEE29 分钟前
初次使用 Node + Koa + MongoDB 搭建服务器:从零到第一个 API
java·spring
m0_5873830034 分钟前
无人自助拼豆系统核心功能开发与部署落地全流程实战指南
java·经验分享·后端·struts·架构
雷一言说43 分钟前
Spring AI 2.0:RAG 文档分块大小策略选择
java·spring
XIAEE43 分钟前
Java 世界历险记:从一行 System.out.println 到整个 Spring 宇宙
java·spring
XIAEE1 小时前
微前端狂想曲:我试图让三个不同门派的前端住进同一栋楼
java·spring
XIAEE1 小时前
Linux 生存指南:从"终端恐惧症"到"命令行老司机"
java·spring
XIAEE1 小时前
实战教程:手机端死活调不出摄像头?聊聊安全上下文(Secure Context)
java·spring
程序员清风1 小时前
堆与优先队列:从 Top K 到任务调度
java·数据结构·算法
XIAEE1 小时前
ES6 与 Node.js 群侠传:那些年我们追过的语法,和那些年把我们追杀的 API
java·spring