前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >简单版:带干扰线的图形验证码生成

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

作者头像
微风-- 轻许--
发布2022-04-13 08:52:01
8900
发布2022-04-13 08:52:01
举报
文章被收录于专栏:java 微风

1.生成工具类;

import java.awt.Color;

代码语言:javascript
复制
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. 调用方法:

代码语言:javascript
复制
/**
	 * 生成图形验证码
	 * @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 页面:

代码语言:javascript
复制
 <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>
代码语言:javascript
复制
		//看不清,点击换一下
        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(" 验证码图片路径获取失败 !");}
        	});
        }
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016/10/27 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
验证码
腾讯云新一代行为验证码(Captcha),基于十道安全栅栏, 为网页、App、小程序开发者打造立体、全面的人机验证。最大程度保护注册登录、活动秒杀、点赞发帖、数据保护等各大场景下业务安全的同时,提供更精细化的用户体验。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档