生成图片彩色验证码(附带验证码旋转)
2012-02-24 19:50
471 查看
生成验证码图片一般返回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 stub ByteArrayInputStream 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; } }
相关文章推荐
- 生成图片彩色验证码(附带验证码旋转)
- 生成图片彩色验证码(附带验证码旋转)
- 如何用php生成扭曲及旋转的验证码图片
- JSP彩色验证码,生成有4个随机数字和杂乱背景的图片,数字和背景颜色会改变,服务器端刷新
- 使用ASP生成任意长度彩色BMP验证码图片
- 使用ASP生成任意长度彩色BMP验证码图片
- 如何用php生成扭曲及旋转的验证码图片
- php生成扭曲及旋转的验证码图片
- Java生成随机验证码图片并进行Base64编码
- java实现生成验证码图片
- 基于Struts2+Spring+Hibernate的彩色验证码的生成
- php生成动态验证码gif图片
- PHP修改图片颜色(生成彩色二维码)
- JSP中生成验证码图片
- JAVA生成问答式验证码图片,支持加减算法
- javaweb(九)—— 通过Servlet生成验证码图片
- Java生成验证码图片的程序
- JAVA 生成验证码图片
- J2EE如何生成验证码图片和点击刷新验证码
- Silverlight中生成并使用验证码图片