天天看點

java 線上圖檔驗證碼生成代碼_Java代碼生成圖檔驗證碼

1.jsp頁面顯示驗證碼,src跳轉到Controller裡的:getImg_validate,reloadImg()作用是點選驗證碼就會換一張(重新請求getImg_validate)

  • 驗證碼:
  • java 線上圖檔驗證碼生成代碼_Java代碼生成圖檔驗證碼

function reloadImg() {

document.getElementById("img_validate").src="image/getImg_validate";

}

java 線上圖檔驗證碼生成代碼_Java代碼生成圖檔驗證碼

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();

}

}

}

java 線上圖檔驗證碼生成代碼_Java代碼生成圖檔驗證碼