`

java之生成图片验证码

    博客分类:
  • java
阅读更多
由于自己的项目登录需要验证码,于是便谢了一个图片验证码生成类。

图片验证实体类 ImageVerification.java
package com.jynine.model;

import java.awt.image.BufferedImage;
import java.io.Serializable;

/**
 * 图片验证类
 * @ClassName: ImageVerification
 * @Description: 图片验证实体类
 * @author caijy
 * @date 2013-12-9 下午9:32:32
 *
 */
public class ImageVerification implements Serializable{

	/**
	 * 
	 */
	private static final long serialVersionUID = -4881192896106347995L;
	//图片
	private BufferedImage image;
	//验证码
	private String verifyCode;
	public BufferedImage getImage() {
		return image;
	}
	public void setImage(BufferedImage image) {
		this.image = image;
	}
	public String getVerifyCode() {
		return verifyCode;
	}
	public void setVerifyCode(String verifyCode) {
		this.verifyCode = verifyCode;
	}
	
}

图片生成类 ImageBuilder.java
package com.jynine.utils;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.Random;

import javax.imageio.ImageIO;

import com.jynine.model.ImageVerification;


/**
 * 图片生成类
 * @ClassName: ImageBuilder
 * @Description: 图片生成类
 * @author caijy caijiuyin@sina.com
 * @date 2013-12-9 下午9:28:13
 *
 */
public class ImageBuilder {
	//图片验证码长度为4
	private int length = 4; 
	//图片宽度
	private int width = 80;
	//图片高度
	private int height = 24;
	//字体高度
	private int fontHeight = height- 4;
	//代码字符
	private char[] codeChar = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J',  
            'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W',  
            'X', 'Y', 'Z','a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j',  
            'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w',  
            'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
	
	//字符之间的宽度
	private int x_space = 3;
	//字符与图片左右边框的间隔   
	private int lr_space = 4;
	//一个字符的宽度
	private int x = (width - 2*lr_space - x_space*(length-1))/length;
	//画直线数量
	private int lineSize = height/4;
	//字符高度
	private int codeY = height - 4;  
	//圆的半径
	private int r = 3;
	//噪点的个数
	private int np_num = 25;
	//验证码对象
	private ImageVerification iv;
	public ImageVerification builder(){
		iv = new ImageVerification();
		BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
		Graphics2D graphics = image.createGraphics();
		//背景颜色
		graphics.setColor(Color.white);
		graphics.fillRect(0, 0, width, height);  
		Font font = new Font(null, Font.BOLD|Font.ITALIC, fontHeight);
		graphics.setFont(font);
		//边框
		graphics.setColor(Color.black);
		graphics.drawRect(0, 0, width - 1, height - 1);  
		//画线
		for (int i = 0; i < lineSize; i++) {
			int ly = lineSize*(i+1);
			graphics.setColor(randomColor());
			graphics.drawLine(1, ly, width-2, ly);
		}
		Random random = new Random();
		//生成噪点
		for (int i = 0; i < np_num; i++) {
			graphics.setColor(randomColor());
			int x = random.nextInt(width);
			int y = random.nextInt(height);
			graphics.fillOval(x, y, r,r);
		}
		StringBuffer sb = new StringBuffer();
		//获取字符
		for (int i = 0; i < length; i++) {
			graphics.setColor(randomColor());
			String codeStr = String.valueOf(codeChar[new Random().nextInt(codeChar.length)]);
			sb.append(codeStr);
			graphics.drawString(codeStr, lr_space+i*x_space+i*x, codeY);
		}
		iv.setVerifyCode(sb.toString());
		iv.setImage(image);
		//清空缓存  
		graphics.dispose();
		return iv;
	}
	/**
	 * 随机生成一个颜色
	 * @return
	 */
	private Color randomColor(){
		 // 创建一个随机数生成器类  
        Random random = new Random();  
        int red = random.nextInt(255);  
        int green = random.nextInt(255);  
        int blue = random.nextInt(255);  
        return new Color(red, green, blue);
	}
	public static void main(String[] args) throws IOException {
		ImageBuilder iBuilder = new ImageBuilder();
		ImageVerification imageVer = iBuilder.builder();
		 File file = new File("E:/img.png");  
		ImageIO.write(imageVer.getImage(), "png", file);
	}
}



生成的验证码样列:



  • 大小: 8 KB
分享到:
评论

相关推荐

    java生成图片验证码

    首先,我们来看标题"java生成图片验证码"。这个标题暗示我们将探讨的是在Java环境中生成随机的、可读性较差的文本,并将其转化为图像的过程,以创建一个验证码。验证码通常由字母、数字或两者混合组成,设计的目的...

    Java生成图片验证码工具类源码

    源码提供了一个生成图片验证码的工具类,适用于各种需要验证码的场景,如用户注册、登录等。该工具类使用随机字符生成验证码,并支持自定义验证码长度和字体样式。生成的验证码图片背景透明,线条清晰,可轻松辨认。...

    JAVA图片验证码 图片验证码

    JAVA图片验证码 图片验证码JAVA图片验证码 图片验证码JAVA图片验证码 图片验证码JAVA图片验证码 图片验证码JAVA图片验证码 图片验证码JAVA图片验证码 图片验证码

    java 生成图片验证码

    在IT领域,验证码(CAPTCHA)是一...在提供的压缩包文件“图片验证码生成”中,可能包含了实现上述功能的源代码示例,你可以通过学习和理解这些代码,加深对Java生成图片验证码的理解,并根据实际需求进行调整和优化。

    JAVA实现随机图片验证码简单方法

    JAVA实现随机图片验证码简单方法.rtf

    java生成图片的验证码工具类及其使用

    java生成验证码的工具类,这个现在有依赖可以直接引入调用,但这个工具类没有引入依赖,大家也容易看懂代码,理解其含义。也可直接去工具类中调整生成验证码的宽度、高度、颜色、背景颜色、生成的随机数数量、干扰线...

    Java随机生成验证码图片

    Java随机生成验证码图片,适用于web登录验证等。个人觉得很不错~

    java随机生成图片验证码

    Java 随机生成图片验证码是一种常见的网络安全技术,主要用于防止自动化程序(如机器人)进行恶意操作,例如批量注册、刷票等。在这个过程中,我们通常会创建一个包含随机字符的字符串,然后将其显示为带有扭曲、...

    java生成验图片验证码

    Java生成图像验证码涉及到以下几个关键知识点: 1. **随机数生成**:验证码通常由一组随机生成的字符组成,可以是数字、字母或者是两者的混合。Java中的`Random`类可以用于生成随机数,然后结合字符集(如ASCII或...

    Java生成图片验证码

    Java生成图片验证码的过程涉及图像处理、随机数生成以及字符串编码等多个知识点。 首先,验证码的核心是生成一个随机的字符串,通常包含字母和数字。在Java中,可以使用`Random`类配合字符数组来生成这种字符串。...

    java代码生成图片验证码

    ### Java代码生成图片验证码知识点详解 #### 一、概述 在Web应用中,为了防止恶意登录或自动化操作,经常会用到验证码技术。其中,图片验证码(也称图形验证码)是一种常见的形式,它通过生成带有随机字符和干扰...

    Java后端生成图片验证码

    Java后端生成图片验证码是一种常见的安全机制,用于防止自动化脚本或机器人进行恶意操作,如批量注册、频繁登录等。这种技术通常涉及到多个组件,包括前端展示、后端生成以及客户端验证。以下是对这个主题的详细说明...

    java 生成动态gif 验证码

    在Java开发中,生成动态GIF验证码是一种常见的安全机制,用于防止自动机器人或者恶意脚本对网站进行非法操作。这种验证码通常包含随机生成的字母、数字或者符号,以动画的形式展示,用户需要输入看到的验证码才能...

    Java servlet 自动生成 图片验证码 生成 Java源码

    Java servlet 自动生成 图片验证码 生成 Java源码

    Java生成算数运算中文图片验证码

    Java生成算数运算中文图片验证码的实现,结合了编程语言、图像处理和安全验证的多种技术,为用户提供了一种既安全又友好的验证方式。下面我们将深入探讨这个主题。 首先,验证码的核心是生成随机的算数运算表达式。...

    java 生成gif 图片验证码

    Java作为一款多用途的编程语言,提供了丰富的库和方法来生成包括GIF格式在内的图片验证码。下面将详细讨论如何在Java中创建GIF动态验证码。 首先,我们需要理解GIF图片验证码的基本构成。它通常包含随机生成的文字...

    java图片滑动验证码

    本资源是java生成图片滑动验证码源码,具体使用可参考https://blog.csdn.net/shiqiangwen/article/details/89888092

    Java实现点击文字验证码与拖动/滑动图片验证码(源码+demo+单元测试+实现思路)

    1.部署步骤 1.1 100%可生产使用. 1.2 导入到idea时候选择maven项目 1.3 修改demo里面子项目resources/application.yml的redis... 4.2拖动图片验证码:https://blog.csdn.net/m0_38138879/article/details/117559456

    利用jsp生成图片验证码

    在本主题“利用jsp生成图片验证码”中,我们将探讨如何在JavaServer Pages (JSP)上下文中创建一个简单的图片验证码,而无需使用Servlet。首先,我们要明白JSP是Java Web开发中的视图层技术,它允许我们在HTML页面中...

Global site tag (gtag.js) - Google Analytics