簡單版:帶干擾線的圖形驗證碼生成
阿新 • • 發佈:2019-01-30
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(" 驗證碼圖片路徑獲取失敗 !");}
});
}