Java根据Hash生成用户头像

阅读: 评论:0

Java根据Hash生成用户头像

Java根据Hash生成用户头像

转载自:

叙述

业务中需要注册用户时,如果没有上传自己的头像,则系统根据Hash自动生成一张图片作为头像

代码

import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.math.BigInteger;
import java.util.Base64;
import java.util.Random;import javax.imageio.ImageIO;public class AvatarHelper {// 可以直接在<img/>标签或者浏览器地址栏预览的base64编码头public static final String BASE64_PREFIX = "data:image/png;base64,";/*** 生成头像的base64编码* @param id* @return* @throws IOException*/public static String createBase64Avatar(int id) throws IOException {return new Encoder().encode(create(id)));}/*** 根据id生成一个头像,颜色随机。如果是使用hashCode()值的话,值可能为负数。需要要注意。* @param id* @return* @throws IOException*/public static byte[] create(int id) throws IOException {int width = 20;int grid = 5;int padding = width / 2;int size = width * grid + width;BufferedImage img = new BufferedImage(size, size, BufferedImage.TYPE_INT_RGB);Graphics2D _2d = ateGraphics();_2d.setColor(new Color(240, 240, 240));_2d.fillRect(0, 0, size, size);_2d.setColor(randomColor(80, 200));char[] idchars = createIdent(id);int i = idchars.length;for (int x = 0; x < il(grid / 2.0); x++) {for (int y = 0; y < grid; y++) {if (idchars[--i] < 53) {_2d.fillRect((padding + x * width), (padding + y * width), width, width);if (x < Math.floor(grid / 2)) {_2d.fillRect((padding + ((grid - 1) - x) * width), (padding + y * width), width, width);}}}}_2d.dispose();ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();ImageIO.write(img, "png", byteArrayOutputStream);ByteArray();}private static Color randomColor(int fc, int bc) {Random random = new Random();if (fc > 255) {fc = 255;}if (bc > 255) {bc = 255;}int r = fc + Int(Math.abs(bc - fc));int g = fc + Int(Math.abs(bc - fc));int b = fc + Int(Math.abs(bc - fc));return new Color(r, g, b);}private static char[] createIdent(int id) {BigInteger bi_content = new BigInteger((id + "").getBytes());BigInteger bi = new BigInteger(id + "identicon" + id, 36);bi = bi.xor(bi_content);String(10).toCharArray();}
}

测试代码

public class Main {public static void main(String[] args) throws Exception {String avatar = ateBase64Avatar(Math.abs("springboot.io".hashCode()));System.out.println(AvatarHelper.BASE64_PREFIX + avatar);}
}

生成的图片数据

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAAB4CAIAAAC2BqGFAAAA7ElEQVR42u3ZUQ0AIAhAQTtbwzzmIoIddNOB98a/cL+20JUaAtCgBRo0aIEGLdBJoUef23OyVr13QYMGDRo0aNCgQYMGDRo0aNCgQYMGDRo0aNCgQYMGnSHQoEGDBg0aNGjQoEGDBg0aNGjQoEGDBg0aNGjQoEFXP/hVoEGDBg0aNGjQoEGDBg0aNGjQoEGDBg0aNGjQoEGDBg0aNGjQoEGDBg0aNGjQoEGDBg0aNGjQoEGDBg0adD7ok4N/G9CgQYMGDRo0aNCgQYMGDRo0aNCgQYMGDRo0aNCgK0Kr+C84aIEGLdCgQQs0aEUsQEqByPsi9i0AAAAASUVORK5CYII=

复制到浏览器地址栏可以直接预览

本文发布于:2024-01-29 04:27:27,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170647365212693.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:头像   用户   Java   Hash
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23