生成图片彩色验证码(附带验证码旋转)

生成验证码图片一般返回InputStream类型,不管什么情况下都能使用,只需要将InputStream这个返回的值在写到文件里就能动态生成

代码如下:

package com.yxfei.tool;import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt.Graphics2D;import java.awt.geom.AffineTransform;import java.awt.image.BufferedImage;import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.InputStream;import java.util.Random;import javax.imageio.ImageIO;import javax.imageio.stream.ImageOutputStream;import javax.servlet.http.HttpServletRequest;public class Verifycode {static Random r = new Random();public static Color getRandColor(int min, int max) {if (min > 255)min = 255;if (max > 255)max = 255;int red = r.nextInt(max – min) + min;int green = r.nextInt(max – min) + min;int blue = r.nextInt(max – min) + min;return new Color(red, green, blue);}public static InputStream getVerifycode(int width,int height,HttpServletRequest request) throws Exception {// TODO Auto-generated method stubByteArrayInputStream inputStream = null;BufferedImage image = new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB);Graphics g = image.getGraphics();Graphics2D g2d = (Graphics2D) g;g.setColor(getRandColor(200, 250));g.fillRect(0, 0, width, height);g.setColor(getRandColor(180, 200));g.drawRect(0, 0, width-1, height-1);for (int i = 0; i < 200; i++) {int x = r.nextInt(width – 1);int y = r.nextInt(height – 1);int x1 = r.nextInt(width – 10)+10;int y1 = r.nextInt(height – 4)+4;g.setColor(getRandColor(180, 200));g.drawLine(x,y,x1,y1);}for(int i=0;i<300;i++){int x = r.nextInt(width);int y = r.nextInt(height);g.setColor(getRandColor(150,180));g.drawRect(x, y, 0, 0);}String sRand = "",s = "";int digital = 0;int itmp = 0;for (int i = 0; i < 4; i++) {switch (r.nextInt(4)) {case 0:case 1:digital = r.nextInt(26) + 65;s = String.valueOf((char) digital);break;case 2:digital = r.nextInt(26) + 97;s = String.valueOf((char) digital);break;default:s = String.valueOf(r.nextInt(9));}sRand +=s;Font mFont = new Font("Arial", Font.BOLD|Font.ITALIC, 25);g.setFont(mFont);boolean b = r.nextBoolean();String a = b?"":"-";int sin = Integer.parseInt(a+r.nextInt(20));g.setColor(getRandColor(20, 130));AffineTransform tr = new AffineTransform();tr.rotate(sin*3.14/180, 15*i+6, b?5:(0));g2d.setTransform(tr);g.drawString(s, 16*i+10, 23);}System.out.println(sRand);request.getSession(true).setAttribute("verifycode", sRand);g.dispose();ByteArrayInputStream input = null;ByteArrayOutputStream output = new ByteArrayOutputStream();try {ImageOutputStream imageOut = ImageIO.createImageOutputStream(output);ImageIO.write(image, "JPEG", imageOut);imageOut.close();inputStream = new ByteArrayInputStream(output.toByteArray());} catch (Exception e) {System.out.println("验证码生成失败"+ e.toString());}return inputStream;}}

,这里的风景美不胜收,真让人流连忘返。

生成图片彩色验证码(附带验证码旋转)

相关文章:

你感兴趣的文章:

标签云: