绘制字体头像(类似于钉钉)

按用户名字绘制字体头像,比如:名字为曾繁荣,绘制字体头像如下图:

public class DingAvatarUtil {/*** 绘制字体头像* 如果是英文名,只显示首字母大写* 如果是中文名,只显示最后两个字** @param name* @param outputPath 文件路径* @param outputName 文件名* @param fillet     圆角大小* @throws IOException*/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);// 检测文件目录是否存在 不存在则创建if (!file.getParentFile().exists()) {file.getParentFile().mkdirs();}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);}/*** 判断字符串是否为中文** @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;}}/*** 获得随机颜色** @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]));}/*** 图片做圆角处理** @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;}public static String getPingYinSuoXie(String inputString) {HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();format.setCaseType(HanyuPinyinCaseType.LOWERCASE);format.setToneType(HanyuPinyinToneType.WITHOUT_TONE);String output = "";if (inputString != null && inputString.length() > 0 && !"null".equals(inputString)) {char[] input = inputString.trim().toCharArray();try {for (int i = 0; i < input.length; i++) {if (java.lang.Character.toString(input[i]).matches("[\\u4E00-\\u9FA5]+")) {String[] temp = PinyinHelper.toHanyuPinyinStringArray(input[i], format);output += temp[0].charAt(0);} else {output += java.lang.Character.toString(input[i]);}}} catch (BadHanyuPinyinOutputFormatCombination e) {e.printStackTrace();}} else {return "*";}return output;}/*** 将字符串中的中文转化为拼音首字母*/public static String getPingYinSuoXie2(String inputString) {HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();format.setCaseType(HanyuPinyinCaseType.LOWERCASE);format.setToneType(HanyuPinyinToneType.WITHOUT_TONE);int a = 0;String output = "";if (inputString != null && inputString.length() > 0 && !"null".equals(inputString)) {char[] input = inputString.trim().toCharArray();try {for (int i = 0; i < input.length; i++) {if (java.lang.Character.toString(input[i]).matches("[\\u4E00-\\u9FA5]+")) {String[] temp = PinyinHelper.toHanyuPinyinStringArray(input[i], format);if (a == 0) {output += temp[0];} else {output += temp[0].charAt(0);}a++;} else {output += java.lang.Character.toString(input[i]);}}} catch (BadHanyuPinyinOutputFormatCombination e) {e.printStackTrace();}} else {return "*";}return output;}/*** 将字符串中的中文转化为拼音*/public static String getPingYin(String inputString) {HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();format.setCaseType(HanyuPinyinCaseType.LOWERCASE);format.setToneType(HanyuPinyinToneType.WITHOUT_TONE);format.setVCharType(HanyuPinyinVCharType.WITH_V);String output = "";if (inputString != null && inputString.length() > 0 && !"null".equals(inputString)) {char[] input = inputString.trim().toCharArray();try {for (int i = 0; i < input.length; i++) {if (java.lang.Character.toString(input[i]).matches("[\\u4E00-\\u9FA5]+")) {String[] temp = PinyinHelper.toHanyuPinyinStringArray(input[i], format);output += temp[0];} else {output += java.lang.Character.toString(input[i]);}}} catch (BadHanyuPinyinOutputFormatCombination e) {e.printStackTrace();}} else {return "*";}return output;}
}

 


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部