文章來自個人博客git
以前作過一個練手的Web項目登錄界面,其中有一個驗證碼模塊,涉及到JavaIO和Java AWT工具因此打算寫一篇介紹,順便對練手項目的源碼作一點小變更github
首先先定義幾個須要的變量bash
private int width=50; //圖片緩衝區的寬
private int height=15; //圖片緩衝區的高
private Random random=new Random(); //隨機數字
private Color color=new Color(255,255,255); //白色背景
private String text; //圖片上的文本
複製代碼
隨機字符包括了10位數字和26個字母app
//生成隨機字符
private char randomChar()
{
//選取隨機數字,生成字符
String numbers = "1234567890qwertyuiopasdfghjklzxcvbnm";
int index=random.nextInt(numbers.length());
//轉換爲char類型
return numbers.charAt(index);
}
//生成隨機顏色
private Color randomColor()
{
//以RGB形式表示顏色
int red=random.nextInt(255);
int green=random.nextInt(255);
int blue=random.nextInt(255);
//返回隨機生成的顏色
return new Color(red,green,blue);
}
複製代碼
//畫干擾線
private void drawLine(Graphics g){
for (int i = 0; i < 2; i++) {
//設置線的顏色
g.setColor(randomColor());
//線的長度從(x1,y1)到(x2,y2)
g.drawLine(random.nextInt(width), random.nextInt(height),
random.nextInt(width), random.nextInt(height));
}
}
複製代碼
//返回驗證碼圖片中的文本
public String getText()
{
return text;
}
複製代碼
//創造圖片緩衝區
private BufferedImage createImage()
{
//參數爲寬度,高度和圖像類型
BufferedImage image=new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
Graphics g=image.getGraphics();
//設置顏色
g.setColor(color);
//填充內容
g.fillRect(0,0,width,height);
return image;
}
複製代碼
//獲得圖片緩衝區
public BufferedImage getImage()
{
BufferedImage image = createImage(); //建立緩衝區
Graphics g = image.getGraphics(); //獲得繪製環境
StringBuilder stringBuilder = new StringBuilder(); //驗證碼文本
//驗證碼長度爲4
for (int i=0;i<4;i++)
{
String str = String.valueOf(randomChar()); //產生隨機字符,將char類型轉爲String類型
stringBuilder.append(str); //將生成的隨機字符添加至stringBuilder
g.setColor(randomColor()); //產生隨機顏色
g.drawString(str, i * width / 4, height); //繪製文本
}
drawLine(g); //添加干擾線
text = stringBuilder.toString(); //把生成字符串賦給文本,以便於驗證
return image;
}
複製代碼
//使用輸出流打印圖片
public static void output(BufferedImage image, OutputStream out) throws IOException {
//做爲JPEG格式輸出圖片
ImageIO.write(image,"JPG",out);
}
複製代碼
直接輸出圖片到個人桌面dom
運行以後的結果:工具
就這樣,簡單的驗證碼就作完了ui