java生成验证码图片

本文介绍了如何使用Java生成验证码图片的代码,适用于需要验证用户输入的场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

很久没写博客了,都快忘记这里有账号了。好了,不罗嗦,跟大家分享下生成验证码图片代码

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 javax.imageio.stream.FileImageOutputStream;

public class ValidateCode {
	/**
	 * 验证码属性名称
	 */
	public static final String VALIDATE_CODE_NAME = "validate_code";

	char[] codeSequence = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };

	/**
	 * 验证码图片的宽度。
	 */
	private int width = 75;

	/**
	 * 验证码图片的高度。
	 */
	private int height = 20;

	/**
	 * 验证码字符个数
	 */
	private int codeCount = 4;

	/**
	 * xx
	 */
	private int xx = 0;

	/**
	 * 字体高度
	 */
	private int fontHeight;

	/**
	 * codeY
	 */
	private int codeY;

	public ValidateCode() {
		xx = width / (codeCount + 1);
		fontHeight = height - 2;
		codeY = height - 4;

	}

	public void getValidateImage() {

		// 定义图像buffer
		BufferedImage buffImg = new BufferedImage(width, height,
				BufferedImage.TYPE_INT_RGB);
		Graphics2D gd = buffImg.createGraphics();

		// 创建一个随机数生成器类
		Random random = new Random();

		// 将图像填充为白色
		gd.setColor(Color.WHITE);
		gd.fillRect(0, 0, width, height);

		// 创建字体,字体的大小应该根据图片的高度来定。
		Font font = new Font("Fixedsys", Font.BOLD, fontHeight);
		// 设置字体。
		gd.setFont(font);

		// 画边框。
		gd.setColor(Color.BLACK);
		gd.drawRect(0, 0, width - 1, height - 1);

		// 随机产生160条干扰线,使图象中的认证码不易被其它程序探测到。
		gd.setColor(Color.BLACK);
		for (int i = 0; i < 10; i++) {
			int x = random.nextInt(width);
			int y = random.nextInt(height);
			int xl = random.nextInt(12);
			int yl = random.nextInt(12);
			gd.drawLine(x, y, x + xl, y + yl);
		}

		// randomCode用于保存随机产生的验证码,以便用户登录后进行验证。
		StringBuffer randomCode = new StringBuffer();
		int red = 0, green = 0, blue = 0;

		// 随机产生codeCount数字的验证码。
		for (int i = 0; i < 4; i++) {
			// 得到随机产生的验证码数字。
			String strRand = String.valueOf(codeSequence[random.nextInt(10)]);
			// 产生随机的颜色分量来构造颜色值,这样输出的每位数字的颜色值都将不

同。
			red = random.nextInt(255);
			green = random.nextInt(255);
			blue = random.nextInt(255);

			// 用随机产生的颜色将验证码绘制到图像中。
			gd.setColor(new Color(red, green, blue));
			gd.drawString(strRand, (i + 1) * xx, codeY);

			// 将产生的四个随机数组合在一起。
			randomCode.append(strRand);
		}

		try {
			FileImageOutputStream writeImage = new FileImageOutputStream(new 

File(
					"c:\\pic.jpg"));
			ImageIO.write(buffImg, "jpeg", writeImage);
			writeImage.close();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}

	public static void main(String[] args) {
		ValidateCode vc = new ValidateCode();
		vc.getValidateImage();
	}
}

Java生成验证码图片对于初学者来说,通常会涉及一些图形库如Apache Commons ImageIO、Java2D或更现代的JavaFX。以下是基本步骤: 1. 导入必要的库:首先,你需要引入`java.awt.image.BufferedImage`,它提供了一个二维像素数组来创建图像;还有`java.awt.Color`用于设置颜色,`java.awt.Graphics2D`用于绘制。 ```java import javax.imageio.ImageIO; import java.awt.*; import java.awt.image.BufferedImage; ``` 2. 创建BufferedImage:指定宽度和高度,然后创建一个新的`BufferedImage`实例。 ```java int width = 100; // 验证码宽度 int height = 40; // 验证码高度 BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); ``` 3. 生成随机字符:选择一个包含数字和字母的字符串集合,随机生成验证码内容。 ```java String chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; StringBuilder sb = new StringBuilder(); for (int i = 0; i < 4; i++) { int randomIndex = (int) (Math.random() * chars.length()); sb.append(chars.charAt(randomIndex)); } String captchaText = sb.toString(); ``` 4. 绘制验证码:通过Graphics2D对象在图像上绘制字符和干扰线等元素。 ```java Graphics2D g2d = image.createGraphics(); g2d.setFont(new Font("Arial", Font.PLAIN, 24)); // 设置字体 Color background = Color.WHITE; g2d.setColor(background); g2d.fillRect(0, 0, width, height); // 填充背景 Color textColor = new Color(0, 0, 0); // 字符色 g2d.setColor(textColor); for (int i = 0; i < captchaText.length(); i++) { int x = i * 20 + 10; // 每个字符之间的间距 int y = 20; g2d.drawString(captchaText.charAt(i) + "", x, y); } // 添加干扰线等其他效果... ``` 5. 保存或显示图片:最后,可以将图像转换为PNG或其他格式并保存到文件,或者直接显示在窗口中(如果是JavaFX的话)。 ```java try { File outputFile = new File("captcha.png"); ImageIO.write(image, "png", outputFile); } catch (IOException e) { e.printStackTrace(); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值