天天看點

【超級詳細】使用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");
  }
}
}