1.jsp頁面顯示驗證碼,src跳轉到Controller裡的:getImg_validate,reloadImg()作用是點選驗證碼就會換一張(重新請求getImg_validate)
- 驗證碼:
-
java 線上圖檔驗證碼生成代碼_Java代碼生成圖檔驗證碼
function reloadImg() {
document.getElementById("img_validate").src="image/getImg_validate";
}
2.寫一個ImageUtil工具類,在裡面可以自定義圖檔生成的大小,字型大小,背景色,驗證碼個數,幹擾線條條數等等
package com.svse.house.util;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.util.Random;
public class ImageUtil {
//1.定義變量儲存生成後的驗證碼字元串
static String code = "";
//2.生成驗證碼
public static String createcode() {
code = "";
String a = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";//随機生成的字元範圍(0-9,a-z,A-Z)
//生成驗證碼的位數(這裡是4位)
for (int i = 0; i < 4; i++) {
int index = (int) (Math.random() * 62);//會産生一個[0,62)的數,不包含小數
char b = a.charAt(index);
code = code + b;
}
return code;
}
//檢視已經生成的驗證碼
public static String getCode() {
return code;
}
//3.生成圖檔
public static BufferedImage createimage() {
// 前2個參數為:width, height.後面是圖像類型
//建立一個不帶透明色的BufferedImage對象,TYPE_INT_ARGB為帶透明色
BufferedImage bi = new BufferedImage(130,50, BufferedImage.TYPE_INT_RGB);
//1.得到一個畫布
Graphics g = bi.getGraphics();
//2.添加背景顔色
g.setColor(Color.WHITE);
g.fillRect(0, 0, 130, 50);
//3.添加幹擾線
for (int i = 0; i < 10; i++) {
Random r = new Random();
int red = r.nextInt(256);
int green = r.nextInt(256);
int blue = r.nextInt(256);
Color c = new Color(red, green, blue);
g.setColor(c);
int x1 = r.nextInt(131);
int y1 = r.nextInt(51);
int x2 = r.nextInt(131);
int y2 = r.nextInt(51);
g.drawLine(x1,y1,x2,y2);//畫線
//g.drawOval(x1, y1, x2, y2);//畫曲線
}
//3.添加文字
g.setColor(Color.BLACK);
g.setFont(new Font("宋體", Font.BOLD, 50));
String str = getCode();
//4.将文字填充到畫闆中
g.drawString(str, 15, 40);
//5.關閉畫布
g.dispose();
return bi;
}
}
3.在controller層調用getImg_validate,試用過jpeg和bmp格式的setContentType,都可以
package com.svse.house.controller;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import com.svse.house.util.ImageUtil;
@Controller
@RequestMapping("/image")
public class ImageController {
@RequestMapping("/getImg_validate")
public void yanzheng(HttpServletResponse response){
try {
ImageUtil.createcode();
BufferedImage image = ImageUtil.createimage();
//以流的方式傳回給用戶端
response.setContentType("image/jpeg");
//response.setContentType("image/bmp");
ByteArrayOutputStream bt = new ByteArrayOutputStream();
//将圖檔轉換成位元組流
ImageIO.write(image,"jpeg",bt);
//ImageIO.write(image,"bmp",bt);
//得到輸出流,傳回用戶端
ServletOutputStream outputStream = response.getOutputStream();
outputStream.write(bt.toByteArray());
} catch (IOException e) {
e.printStackTrace();
}
}
}