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

<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");
	}
}
}

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值