Spring Mvc - 用户注册服务端生成默认头像实现
来源:互联网 发布:骂醒我 网络歌手 编辑:程序博客网 时间:2024/06/06 12:54
需求:
- 注册的时候提交昵称,账号,密码(这里不说明,仅仅是需求)
- 根据昵称获得第一个字母,数字,汉子,生成默认图片;
- 默认图片需求:浅色底+黑色字;深色底+白色字
- 头像尺寸:120px * 120px , 字体尺寸:50
- 字体显示位置 居中显示
实现:
1.文字获得
public class StringUtil { private static final String ENGLISH_CHARS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; /** * 获取首字母或汉字来,用来进行绘制头像 * @param nick * @return */ public static String getCharString(String nick){ if(nick==null){ return String.valueOf(ENGLISH_CHARS.charAt((int)(Math.random() * 26))); } char[] chars = nick.toCharArray(); if(chars.length>0){ char c=chars[0]; if(Character.isLetter(c)){ //是字母 if(Character.isLowerCase(c)){ //是否是小写字母 c=Character.toUpperCase(c); return String.valueOf(c); }else { return String.valueOf(c); } }else{ //不是字母返回 return String.valueOf(c); } } return String.valueOf(ENGLISH_CHARS.charAt((int)(Math.random() * 26))); }}
2.绘制默认头像
注释写的很详细,见注释
package yuan.ssm.common.util;import javax.imageio.ImageIO;import java.awt.*;import java.awt.image.BufferedImage;import java.io.File;import java.util.*;import static yuan.ssm.common.config.ConfigConstant.FONT_IMAGE_BASE_PATH;/** * ================================================== * <p/> * 版权: 软件工程.net12-1 原明卓 * <p/> * 项目: 基于用户兴趣标签的新闻推荐系统 * <p/> * 作者: 原明卓 * <p/> * 版本: 1.0 * <p/> * 创建日期: 16-4-14 上午11:36 * <p/> * 功能描述: 根据用户昵称生成用户头像 * <p> * <p/> * 功能更新历史: * <p> * ================================================== */public class FontImageUtil { /** * 根据文字和图片名称创建图片 * 默认的字体 宋体加粗 * @param str 文字 * @param imgName 文件明 * @throws Exception */ public static void createImage(String str, String imgName) throws Exception{ createImage(str,new Font("宋体",Font.BOLD,50),new File(FONT_IMAGE_BASE_PATH+imgName)); } /** * 根据str,输出目录创建图片 * 文字样式默认为 宋体加粗 * @param str 文字 * @param outFile 输出目录 * @throws Exception */ public static void createImage(String str, File outFile) throws Exception{ createImage(str,new Font("宋体",Font.BOLD,50),outFile); } /** * 根据str,font的样式以及输出文件目录 * @param str 文字 * @param font 字体样式 * @param outFile 输出的文件及其输出的位置 * @throws Exception * createImage("中华人民共和国",new Font("宋体",Font.BOLD,18),new File("e:/a.png")); */ public static void createImage(String str, Font font, File outFile) throws Exception{// ArrayList<int[]> rgbs = getRGB(); int[] ranRGB = getRanRGB(); boolean isQian=isQianRGB(ranRGB); int width=120; int height=120; //创建图片 BufferedImage image=new BufferedImage(width,height,BufferedImage.TYPE_INT_BGR); Graphics2D g=image.createGraphics(); g.setColor(new Color(ranRGB[0],ranRGB[1],ranRGB[2]));// 一个未知颜色 g.fillRect(0, 0, width, height);//先用颜色填充背景 //判断是浅颜色还是深颜色 if(isQian){ g.setColor(Color.black);//黑色 }else{ g.setColor(Color.white);//白色 } //设置画笔字体 g.setFont(font); g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON); //判断字体的绘制位置,居中显示 FontMetrics fm=g.getFontMetrics(font); int textWidth=fm.stringWidth(str); int x=(width-textWidth)/2; int ascent=fm.getAscent(); int descent=fm.getDescent(); int y=(height-ascent-descent)/2+ascent; //画出字符串 g.drawString(str,x,y); g.dispose(); //输出png图片 ImageIO.write(image, "png", outFile); } /** * 一个算法 - 判断是深颜色还是浅颜色的算法 * * $grayLevel = $R * 0.299 + $G * 0.587 + $B * 0.114; * if ($grayLevel >= 192) { * // add shadow * } * * @deprecated 业务修改,不仅仅是需要深色悲剧,浅色字,效率底 * * 修改为 : 获得随机颜色背景,深色绘制白色字体,浅色,绘制黑色字体 * */ private static ArrayList<int[]> getRGB(){ //1. 随机生成 rgb //2. 判断深颜色还是浅颜色 //3. 继续随机生成 rgb //4. 判读是深颜色还是浅颜色 :和第一次相反,返回两个rgb值 //5. 颜色深的作为背景,颜色浅的作为文字; //6. 第一个存放浅颜色,第二个存放深颜色 ArrayList<int[]> colorList=new ArrayList<int[]>(); int[] rgb = getRanRGB(); while (true){ if(isQianRGB(rgb)){ colorList.add(rgb); break; }else { rgb=getRanRGB(); } } int[] rgbQ=getRanRGB(); while (true){ if(isQianRGB(rgbQ)){ rgbQ=getRanRGB(); }else { colorList.add(rgbQ); break; } } return colorList; } /** * 获得随机颜色 * @return rgb颜色 */ private static int[] getRanRGB(){ int [] colors=new int[3]; for(int i=0;i<colors.length;i++){ colors[i]=(int)(Math.random()*256); } return colors; } /** * 判断是不是浅颜色 * @param colors * @return 是否是浅颜色 */ private static boolean isQianRGB(int[] colors){ int grayLevel = (int) (colors[0] * 0.299 + colors[1] * 0.587 + colors[2] * 0.114); if(grayLevel>=192){ return true; } return false; }}
3.参考
文字居中显示参考文章,请点击我
4.效果
0 0
- Spring Mvc - 用户注册服务端生成默认头像实现
- SpringMvc - 用户注册自动生成默认头像深色底/浅色字工具类实现
- Spring MVC实现分步用户注册
- 用户注册时上传头像的实现
- node+vue实现用户注册--头像上传
- spring boot MVC 三 用户注册和登录的实现
- JSP MVC实现用户注册
- Spring MVC中实现页面更换头像
- Spring MVC用户注册和登录示例
- 实现web版用户注册(可以上传头像)
- Spring,Spring MVC,MongoDB实现登录注册
- Discuz修改默认用户头像
- Spring默认标签解析及注册实现
- Spring MVC 与 Hibernate 实现注册功能
- Spring MVC + mybatis实现的注册登录
- spring mvc 模拟数据库实现注册 登录
- Spring Boot / Spring MVC 入门实践 (三) : 入门项目介绍与用户注册登录的实现
- Spring Boot / Spring MVC 入门实践 (三) : 入门项目介绍与用户注册登录的实现
- 219. Contains Duplicate II
- C语言中 sqlite3 的 一些调用方式
- Android Studio 全屏问题
- MAVEN工程的构建与命令使用
- NSPredicate的用法使用情况
- Spring Mvc - 用户注册服务端生成默认头像实现
- shell脚本中判断文件是否存在
- iOS获取当前所连接的WIFI名称
- Android Studio下的项目结构以及Drawable的使用
- HTML5和HTML属性及元素整理
- Leetcode题解 7. Reverse Integer
- sqlite3 数据库操作
- 关于写代码的习惯问题
- mysql之触发器trigger