SpringMvc - 用户注册自动生成默认头像深色底/浅色字工具类实现
2016-04-15 00:08
543 查看
1.文字处理工具类实现
package yuan.ssm.common.util; /** * ================================================== * <p/> * 版权: 软件工程.net12-1 原明卓 * <p/> * 项目: 基于用户兴趣标签的新闻推荐系统 * <p/> * 作者: 原明卓 * <p/> * 版本: 1.0 * <p/> * 创建日期: 16-4-14 下午9:55 * <p/> * 功能描述: 字符串处理类 * <p> * <p/> * 功能更新历史: * <p> * ================================================== */ 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,40),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,40),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 width=120; int height=120; //创建图片 BufferedImage image=new BufferedImage(width,height,BufferedImage.TYPE_INT_BGR); Graphics g=image.getGraphics(); g.setColor(new Color(rgbs.get(1)[0],rgbs.get(1)[1],rgbs.get(1)[2]));//深色 g.fillRect(0, 0, width, height);//先用深色填充整张图片,也就是背景 g.setColor(new Color(rgbs.get(0)[0],rgbs.get(0)[1],rgbs.get(0)[2]));//在换成浅色 g.setFont(font);//设置画笔字体 //画出字符串 g.drawString(str,70,70); g.dispose(); //输出png图片 ImageIO.write(image, "png", outFile); } /** * 一个算法 - 判断是深颜色还是浅颜色的算法 * * $grayLevel = $R * 0.299 + $G * 0.587 + $B * 0.114; * if ($grayLevel >= 192) { * // add shadow * } * * 已废弃 */ 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 */ 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.调用测试
String imgName = UUID.randomUUID() +".png"; String font=StringUtil.getCharString("原明卓"); FontImageUtil.createImage(font,imgName);
相关文章推荐
- C#、ASP.NET通用扩展工具类之TypeParse
- C#、ASP.NET通用扩展工具类之LogicSugar
- C#、ASP.NET通用工具类IsWhat?(可以判断数字、身份证、数据类型等等)
- PHP制作用户注册系统
- 用于判断用户注册时,密码强度的JS代码
- AJAX 用户注册时的应用实例
- Asp.net下利用Jquery Ajax实现用户注册检测(验证用户名是否存)
- Android封装的http请求实用工具类
- ASP.NET实现用户注册和验证功能(第4节)
- ASP.NET用户注册实战(第11节)
- Asp.Mvc 2.0实现用户注册实例讲解(1)
- Android开发中4个常用的工具类【Toast、SharedPreferences、网络及屏幕操作】
- Android AES加密工具类分享
- 超实用的android网络工具类
- 实例详解Android快速开发工具类总结
- Android 数据存储之 FileInputStream 工具类及FileInputStream类的使用
- Android开发之MediaPlayer多媒体(音频,视频)播放工具类
- Android开发之超强图片工具类BitmapUtil完整实例
- Android开发之图片切割工具类定义与用法示例
- Android开发实现的IntentUtil跳转多功能工具类【包含视频、音频、图片、摄像头等操作功能】