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

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。

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(" 验证码图片路径获取失败 !");}
        	});
        }

 

 

 

 

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值