生成验证码
来源:互联网 发布:剑三脸型数据非法 编辑:程序博客网 时间:2024/06/05 14:21
import java.awt.BasicStroke;import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt.Graphics2D;import java.awt.image.BufferedImage;import java.io.IOException;import java.io.OutputStream;import java.util.Random;import javax.imageio.ImageIO;public class VerifyCode { private int width=70; private int height=35; private Random r=new Random(); //可选字体样式 private String[] fontNames={"宋体","华文楷体","黑体","微软雅黑","楷体_GB2312"}; //可选字符 private String codes="23456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; //背景色 private Color bgcolor=new Color(255,255,255); private String text; //生成随机的颜色 private Color randomColor(){ int red=r.nextInt(150); int green=r.nextInt(150); int blue=r.nextInt(150); return new Color(red,green,blue); } //生成随机的字体 private Font randomFont(){ int index=r.nextInt(fontNames.length); String fontName=fontNames[index]; //生成随机的字体名称 int style=r.nextInt(4); //生成随机样式,0(无样式),1(粗体),2(斜体),3(粗体+斜体) int size=r.nextInt(5)+24; //生成随机字号,24~28 return new Font(fontName,style,size); } //画干扰线 private void drawLine(BufferedImage image){ int num=3; //一共画3条 Graphics2D g2 = (Graphics2D)image.getGraphics(); for(int i=0;i<num;i++){ //划线之前,首先确定两个点 int x1=r.nextInt(width); int y1=r.nextInt(height); int x2=r.nextInt(width); int y2=r.nextInt(height); g2.setStroke(new BasicStroke(1.5F)); g2.setColor(Color.blue);//干扰线是蓝色的 g2.drawLine(x1, y1, x2, y2);//画线 } } //随机生成一个字符 private char randomChar(){ int index=r.nextInt(codes.length()); return codes.charAt(index); } //创建一个BufferedImage private BufferedImage createImage(){ BufferedImage image = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB); Graphics2D g2 = (Graphics2D)image.getGraphics(); //得到绘画环境(画笔) g2.setColor(this.bgcolor); //设置绘画环境的颜色 g2.fillRect(0,0,width,height); //给绘画环境填充一个矩形 return image; } public BufferedImage getImage(){ BufferedImage image=createImage(); //创建图片缓冲区 Graphics2D g2=(Graphics2D)image.getGraphics();//得到绘制环境 StringBuffer sb=new StringBuffer();//用来装载生成的验证码文本 //向图片中画4个字符 for(int i=0;i<4;i++){ String s=randomChar()+""; //随机生成一个字母 sb.append(s); //把字母添加到sb中 float x=i*1.0F*width/4; //将图片分为4分,x为每4分的左上起点 g2.setFont(randomFont());//设置随机字体 g2.setColor(randomColor());//设置随机颜色 g2.drawString(s, x,height-5);//画图 } this.text=sb.toString(); //把生成的字符赋给了this.text drawLine(image);//添加干扰线 return image; } //返回验证码图片上的文本 public String getText(){ return text; } //保存图片到指定的输出流 public static void output(BufferedImage image,OutputStream out) throws IOException{ ImageIO.write(image, "JPEG", out); } }
阅读全文
0 0
- 验证码生成及验证
- 生成验证码并验证
- 验证码生成与验证
- C#生成验证码
- C#生成验证码
- 生成验证码
- 验证码生成
- 生成验证码
- JSP生成验证码
- 生成验证码
- 生成验证码
- 数字验证码生成
- 动态生成验证码
- 生成验证码(1)
- 生成验证码(2)
- c# 生成验证码
- 生成验证码图像
- 生成验证码
- python设计模式之访问者模式
- 51Nod
- Two Sum
- 2017第20届中国西安国际供热采暖与建筑环境技术设备展览会会刊(参展商名录)
- 什么是存根类 Stub
- 生成验证码
- 设计模式--责任链模式
- Ubuntu安装c#编译器mono
- 如何用一次循环得到数组中第二大数
- 浅谈-ModBus-发送报文
- 封装
- 数据结构的链栈基本操作
- Java IO ClassLoader
- 判断若干个点是否前景的习题