1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125
| package hw.utils.common;
import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.image.BufferedImage; import java.io.IOException; import java.io.OutputStream; import java.util.Random; import javax.imageio.ImageIO; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletResponse;
public class ValidateCode { private int width = 70; private int height = 35; private Random random = new Random(); private StringBuilder code = new StringBuilder(4); private BufferedImage createImage(){ BufferedImage img = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); Graphics g = img.getGraphics(); g.setColor(new Color(240,240,240)); g.fillRect(0, 0, width, height); return img; }
private String getCode(){ return this.code.toString(); } private BufferedImage getImage(){ BufferedImage img = this.createImage(); Graphics g = img.getGraphics(); for(int i=0;i<4;i++){ String str = this.getRandomString(); this.code.append(str); g.setFont(this.getRandomFont()); g.setColor(this.getRandomColor()); g.drawString(str, width/4*i, height-5); } this.drawLines(img); return img; }
private void drawLines(BufferedImage image){ Graphics g = image.getGraphics(); g.setColor(Color.BLACK); for(int i=0;i<5;i++){ int x1 = random.nextInt(this.width); int y1 = random.nextInt(this.height); int x2 = random.nextInt(this.width); int y2 = random.nextInt(this.height); g.drawLine(x1, y1, x2, y2); } } private Color getRandomColor() { int r = this.random.nextInt(256); int g = this.random.nextInt(256); int b = this.random.nextInt(256); return new Color(r, g, b); }
private String[] fontNames = {"宋体","华文楷体","黑体","华文新魏","华文隶书","微软雅黑","楷体_GB2312"}; private int[] fontSizes = {24,25,26,27,28}; private Font getRandomFont() { int index = this.random.nextInt(this.fontNames.length); String name = this.fontNames[index]; int style = this.random.nextInt(4); index = this.random.nextInt(this.fontSizes.length); int size = this.fontSizes[index]; return new Font(name, style, size); }
private String codes = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; private String getRandomString() { int index = random.nextInt(this.codes.length()); return this.codes.charAt(index)+""; }
private void saveImage(BufferedImage im,OutputStream output) throws IOException{ ImageIO.write(im, "JPEG", output); }
public static String outputImage(HttpServletResponse response) throws Exception{
response.setContentType("image/jpeg"); ServletOutputStream servletOutputStream = response.getOutputStream(); ValidateCode v = new ValidateCode(); BufferedImage img = v.getImage(); v.saveImage(img,servletOutputStream); servletOutputStream.flush(); servletOutputStream.close();
return v.getCode();
}
}
|