1. 程式人生 > >簡單版:帶干擾線的圖形驗證碼生成

簡單版:帶干擾線的圖形驗證碼生成

maven/java/web/bootstrapQQ群:566862629。希望更多人一起幫助我學習。

1.生成工具類;

import java.awt.Color;

import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.FileOutputStream;
import java.util.Random;

import javax.imageio.ImageIO;

/**
 * 登陸圖形驗證碼生成工具類
 * @author JiangYu
 */
public class ImageCreate {
    
    public static void main(String[] args)throws Exception {
    	//測試
    	new ImageCreate().create();     
    }
    
    //驗證碼字串
    private String codeV;
    
    public String getCode() {
		return codeV;
	}
	//生成驗證碼
    public BufferedImage create() throws Exception {
	     // 大小
	     int width = 120;
	     int height = 30;
	     /*
	      * Image是一個抽象列,BufferedImage是Image的實現。
	      * Image和BufferedImage的主要作用就是將一副圖片載入到記憶體中。
	     */
	     // 宣告一個 RGB格式圖片:圖片型別為rgb
	     BufferedImage img = new BufferedImage(width, height,BufferedImage.TYPE_INT_BGR);
	     // 獲取畫筆
	     Graphics g = img.getGraphics();
	     // 背景色
	     g.setColor(Color.WHITE);
	     // 畫
	     g.fillRect(0, 0, width, height);
	     // 字型
	     g.setFont(new Font("黑體", Font.BOLD, 18));
	     //為codeV傳值 
	     String d ="";
	     // 寫一個字元到img
	     Random r = new Random();
	     for (int i = 0; i < 4; i++) {
	         //生成隨機字母 
	         String chars = "ABCDEFGHJKMNOPQRSTUVWXYZ";
	         char codeEnglish = chars.charAt((int)(Math.random() * 24));
	         d += codeEnglish;
	         codeV = d;
	         // 畫筆隨機色
	         g.setColor(new Color(r.nextInt(256), r.nextInt(256), r.nextInt(256)));
	         // 寫出字元
	         g.drawString("" + codeEnglish, i * 30, 10 + r.nextInt(20));   
	     }
	     //干擾線
	     for(int i=0;i<4;i++){
	         g.setColor(new Color(r.nextInt(256), r.nextInt(256), r.nextInt(256)));
	         //畫線
	         g.drawLine(r.nextInt(120), r.nextInt(30), r.nextInt(120), r.nextInt(30));
	     }
	     //圖片生成
	     g.dispose();
	     //設定路徑: 路徑要用到轉義\\
//	     ImageIO.write(img,"JPEG", new FileOutputStream("H:\\JiangYu\\YanZhengImages\\yanZhengImage.jpg"));
	     return img;
    }
}



2.  呼叫方法:
/**
	 * 生成圖形驗證碼
	 * @param request
	 * @param response
	 * @throws Exception
	 */
	@RequestMapping(value="/getCode")
	public void getCode(HttpServletRequest request,HttpServletResponse response) throws Exception {
		
		ImageCreate i = new ImageCreate();
		//傳送圖片 
    	ImageIO.write(i.create(), "JPEG", response.getOutputStream());  
    	//驗證碼字元 
    	String code = i.getCode().toString();  
    	request.getSession().setAttribute("code", code);
	}


3. jsp  頁面:

 <div style="margin-bottom: 20px">
                <input id="code" name="code" type="text" class="easyui-textbox" style="width: 39%;
                    height: 40px; padding: 12px" data-options="prompt:'驗證碼',iconWidth:38" />
				<!-- 1.浮動提示框效果:easyui-tooltip、2.如果無法顯示影象,瀏覽器將顯示替代文字:alt屬性 -->
                <a href="#" title="看不清,點選換一下" class="easyui-tooltip">
                    <img onclick="change()" class="easyui-linkbutton" src="/getCode" id="vimg" alt="" style="height: 40px;" /></a>
             </div>

		//看不清,點選換一下
        function change() {
        	//圖片物件
        	var imgNode = document.getElementById("vimg");
        	$.ajax({
        		url:"/getCode",
        		type:"post",
        		success:function(data){
        			//改變src屬性值 
        			imgNode.src="/getCode?t=" + (new Date()).valueOf();
        		},
        		error:function(){alert(" 驗證碼圖片路徑獲取失敗 !");}
        	});
        }