您的位置:首页 > 编程语言 > Java开发

【超级详细】使用java生成带干扰线颜色不一的验证码

2014-08-05 19:57 441 查看
<pre name="code" class="java">package testpackage;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.Random;
import javax.imageio.ImageIO;
public class TestClass {

public static void main(String[] lovingshu){
BufferedImage bufImage=new BufferedImage(100,30,BufferedImage.TYPE_3BYTE_BGR);		//创建BufferedImage对象
Graphics gra=bufImage.getGraphics();					//使用BufferedImage对象得到Graphics对象
Random ran=new Random();			//随机数对象
gra.setColor(Color.white);										//设置画布背景色
gra.setFont(new Font("微软雅黑",Font.ITALIC,20));//设置字体
gra.fillRect(0, 0, 100, 30);										//此部为绘制一个矩形,其中x,y坐标都是从0开始,宽度为100,高度为30
String vliCode="";
while(vliCode.length()<4){
gra.setColor(new Color(ran.nextInt(255)+1,ran.nextInt(255)+1,ran.nextInt(255)+1));		//随机得到颜色用于绘制内容
String tmp="";
//the style of the code
switch(ran.nextInt(3)){
case 0:
tmp=(char)(ran.nextInt(26)+65)+"";				//得到a-z的26字母
break;
case 1:
tmp=(char)(ran.nextInt(26)+97)+"";				//得到A-Z的26字母
break;
default:
tmp=ran.nextInt(10)+"";								//得到数字0-9
break;
}
gra.drawString(tmp,10+vliCode.length()*20,20);		//此步为在x坐标为(10+vliCode.length()*20)y坐标为20的地方绘制内容为tmp的字符图。
vliCode+=tmp;
}
//绘制干扰线
for(int i=0;i<(ran.nextInt(5)+5);i++){
gra.setColor(new Color(ran.nextInt(255)+1,ran.nextInt(255)+1,ran.nextInt(255)+1));	//设置干扰线的颜色
gra.drawLine(ran.nextInt(100),ran.nextInt(30),ran.nextInt(100),ran.nextInt(30));				//设置干扰线的坐标
}
//把图像保存到E盘,如果是网站则可以把图片保存到项目下面然后页面上取出来即可
try {
File fi=new File("E:\\ValidateCode.jpg");//this is the path
ImageIO.write(bufImage,"jpeg",fi);
if(fi.exists()){
System.out.println("Success!");
}else{
System.out.println("Failed!");
}
} catch (IOException e) {
e.printStackTrace();
}finally{
System.out.println("Lovingshu's Forever");
}
}
}



                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: