龙空技术网

使用java生成图形验证码

功城师 389

前言:

今天朋友们对“java验证码生成”大约比较珍视,各位老铁们都需要了解一些“java验证码生成”的相关资讯。那么小编也在网上网罗了一些关于“java验证码生成””的相关文章,希望我们能喜欢,兄弟们一起来了解一下吧!

验证码,一个图片文件

-外框

-底色

-干扰线

*随机产生一些直线

-字母

*字母选择,不要O,0,1,L,I(它们太相近,很难区分,建议还是不要采取)

*字母颜色(RGB)

*字母位置

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;

public class YanZhengMa {

//没有1 I L 0 o

static char[] codeSequence = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K', 'M', 'N', 'P', 'Q', 'R', 'S', 'T',

'U', 'V', 'W', 'X', 'Y', 'Z', '2', '3', '4', '5', '6', '7', '8', '9' };

static int charNum = codeSequence.length;

public static void main(String[] args) throws IOException{

generateCode("G:/ image/code.jpg");

}

private static void generateCode(String string)throws IOException {

// 首先定义验证码图片框

int width = 80; // 验证码图片的宽度

int height = 32; // 验证码图片的高度

BufferedImage buffImg = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);

//定义图片上的图形和干扰线

Graphics2D gd = buffImg.createGraphics();

gd.setColor(Color.LIGHT_GRAY); // 将图像填充为浅灰色

gd.fillRect(0, 0, width, height);

gd.setColor(Color.BLACK); // 画边框。

gd.drawRect(0, 0, width - 1, height - 1);

// 随机产生16条灰色干扰线,使图像中的认证码不易识别

gd.setColor(Color.gray);

// 创建一个随机数生成器类 用于随机产生干扰线

Random random = new Random();

for (int i = 0; i < 16; 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);

}

//计算字的位置坐标

int codeCount = 4; // 字符个数

int fontHeight; // 字体高度

int codeX; // 第一个字符的x坐标,因为后面的字符坐标依次递增,所以它们的x轴值是codeX的倍数

int codeY; // 验证字符的y坐标,因为并排所以值一样

// width-4 除去左右多余的位置,使验证码更加集中显示,减得越多越集中。

// codeCount+1 //等比分配显示的宽度,包括左右两边的空格

codeX = (width - 4) / (codeCount + 1); //第一个字母的起始位置

fontHeight = height - 10; // height - 10 高度中间区域显示验证码

codeY = height - 7;

// 创建字体,字体的大小应该根据图片的高度来定。

Font font = new Font("Fixedsys", Font.PLAIN, fontHeight);

gd.setFont(font);

// 随机产生codeCount数字的验证码。

for (int i = 0; i < codeCount; i++) {

// 每次随机拿一个字母,赋予随机的颜色

String strRand = String.valueOf(codeSequence[random.nextInt(charNum)]);

int red = random.nextInt(255);

int green = random.nextInt(255);

int blue = random.nextInt(255);

gd.setColor(new Color(red,green,blue));

//把字放到图片上!!!

gd.drawString(strRand, (i + 1) * codeX, codeY);

}

ImageIO.write(buffImg, "jpg", new File(string));

}

}

运行程序出现下图错误,系统寻找不到图片所在位置

运行:

运行结果:

再运行:

扩展知识:

1.java的ATW包提供一些基础的图形工具Graphics2D.

2.javax的imageio包提供了基础的图像读写和剪辑.

标签: #java验证码生成