package com.fgkj.actions; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.image.BufferedImage; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.OutputStream; import java.util.HashMap; import java.util.Map; import java.util.Random; import javax.imageio.ImageIO; import com.fgkj.services.ServiceModel; import sun.misc.BASE64Encoder; public class IdentifyingAction extends ActionUtil{ private String result; //获取验证码 public String serchIdentifying(){ //在内存中创建一个长80,宽30的图片,默认黑色背景 //参数一:长 //参数二:宽 //参数三:颜色 int width = 80; int height = 30; BufferedImage image = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB); //获取画笔 Graphics g = image.getGraphics(); //设置画笔颜色为灰色 g.setColor(Color.GRAY); //填充图片 g.fillRect(0,0, width,height); //产生4个随机验证码,12Ey String checkCode = getCheckCode(); Map map = new HashMap(); map.put("sssss", checkCode); //System.out.println("sessionid:"+ActionUtil.getSession().getId()); //将验证码放入HttpSession中 ActionUtil.getSession().setAttribute("sssss",ActionUtil.getGson().toJson(map)); //System.out.println(ActionUtil.getSession().getAttribute("sssss")); //设置画笔颜色为黄色 g.setColor(Color.YELLOW); //设置字体的小大 g.setFont(new Font("黑体",Font.BOLD,24)); //向图片上写入验证码 g.drawString(checkCode,15,25); //将内存中的图片输出到浏览器 //参数一:图片对象 //参数二:图片的格式,如PNG,JPG,GIF //参数三:图片输出到哪里去 //ImageIO.write(image,"PNG",response.getOutputStream()); String png_base64=BufferedImageToBase64(image); ServiceModel model=new ServiceModel(); model.setMsg(png_base64); result=tojson(model); return SUCCESS; } /** * 产生4位随机字符串 */ private String getCheckCode() { String base = "0123456789ABCDEFGHIJKLMNOPQRSTIVWXYZabcdefghijklmnopqrstuvwxyz"; int size = base.length(); Random r = new Random(); StringBuffer sb = new StringBuffer(); for(int i=1;i<=4;i++){ //产生0到size-1的随机值 int index = r.nextInt(size); //在base字符串中获取下标为index的字符 char c = base.charAt(index); //将c放入到StringBuffer中去 sb.append(c); } return sb.toString(); } //BufferedImage转为base64字符串 private String BufferedImageToBase64(BufferedImage image){ ByteArrayOutputStream baos = new ByteArrayOutputStream();//io流 try { ImageIO.write(image, "png", baos); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }//写入流中 byte[] bytes = baos.toByteArray();//转换成字节 BASE64Encoder encoder = new BASE64Encoder(); String png_base64 = encoder.encodeBuffer(bytes).trim();//转换成base64串 png_base64 = png_base64.replaceAll("\n", "").replaceAll("\r", "");//删除 \r\n // ImageIO.write(bufferedImage, "png", new File("D:/qrcode1.png")); //System.out.println("值为:"+"data:image/jpg;base64,"+png_base64); return "data:image/jpg;base64,"+png_base64; } public String getResult() { return result; } }