简单版:带干扰线的图形验证码生成

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  页面:


 

		//看不清,点击换一下
        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(" 验证码图片路径获取失败 !");}
        	});
        }


你可能感兴趣的:(Java)