使用java生成图片验证码

本程序来源以下网址:http://www.linux521.com/2009/java/200909/8475.html
仅供学习和参考

import java.awt.BasicStroke;

import java.awt.Color; import java.awt.Font;

import java.awt.Graphics; import java.awt.Graphics2D;

import java.awt.geom.AffineTransform;

import java.awt.geom.Line2D;

import java.awt.image.BufferedImage;

import java.io.ByteArrayInputStream;

import java.io.ByteArrayOutputStream;

import java.io.IOException;

import java.util.Random;

import javax.imageio.ImageIO;

import javax.imageio.stream.ImageOutputStream;

/**

*

* @author zyong

*验证码

*/

public class CheckCode {

/**

*创建一个随机数对象

*/

Random random = new Random();

/**

*生成的字符集

*/

private final String character = "0ABC1DEF2GHI3JKL4MNO5PQR6ST7UV8WX9YZ";

/**

*返回生成后的图片字符

*/

private String checkCode;

/**

* 设置生成图片的宽度,默认为65

*/

private int width = 65;

/**

* 设置生成图片的高度,默认为25

*/

private int height = 25;

/**

* 设置图片的类型,默认为BufferedImage.TYPE_INT_RGB

*/

private int imageType = BufferedImage.TYPE_INT_RGB;

/**

*

* @return生成图片后的字符

*/

public String getCheckCode() {

return checkCode;

}

/**

*

* @return图片的高度

*/

public int getHeight() {

return height;

}

/**

*

* @param height图片的高度

*/

public void setHeight(int height) {

this.height = height;

}

/**

*


* @return图片的宽度

*/

public int getWidth() {

return width;

}

/**

*

* @param width图片的宽度

*/

public void setWidth(int width) {

this.width = width;

}

/**

*

* @return图片类型

*/

public int getImageType() {

return imageType;

}

/**

*

* @param imageType图片类型

*/

public void setImageType(int imageType) {

this.imageType = imageType;

}

public ByteArrayInputStream buildImage() {

BufferedImage image = new BufferedImage(this.width, this.height, this.imageType);

Graphics g = image.getGraphics();

Graphics2D g2d = (Graphics2D) g;

g.setColor(this.getColor(200, 250));

g.fillRect(0, 0, this.width, this.height);

g.setFont(new Font("Times New Roman", Font.BOLD, 17));

g.setColor(this.getColor(180, 200));

/*

*绘制100条干扰线

*/

for (int i = 0; i < 100; i ) {

int x1 = random.nextInt(this.width);

int y1 = random.nextInt(this.height);

int x2 = random.nextInt(this.width - 3);

int y2 = random.nextInt(this.height - 3);

BasicStroke bs = new BasicStroke(2f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL);

Line2D line = new Line2D.Double(x1, y1, x2, y2);

g2d.setStroke(bs);

g2d.draw(line);

g.setColor(getColor(180, 222));

}

StringBuffer codeStr = new StringBuffer();

for (int i = 0; i < 4; i ) {

char c = character.charAt(random.nextInt(36));

codeStr.append(c);

Color color = new Color(20 random.nextInt(110), 20 random.nextInt(110), 20 random.nextInt(110));

g.setColor(color); /*随机文字,旋转文字到指定角度*/


AffineTransform trans = new AffineTransform();

trans.rotate(random.nextInt(10) * i 3, 5);

float scaleSize = random.nextFloat() 0.5f;

if (scaleSize < 0.8 || scaleSize > 1.1f) {

scaleSize = 1f;

}

trans.scale(scaleSize, scaleSize); g2d.setTransform(trans);

g.drawString(String.valueOf(c), 15 * i 6, 9);

}

this.checkCode = codeStr.toString(); g.dispose();

ByteArrayInputStream inputStream = null;

ByteArrayOutputStream outputStream = new ByteArrayOutputStream();

try {

ImageOutputStream imgOutput = ImageIO.createImageOutputStream(outputStream);

ImageIO.write(image, "JPEG", imgOutput);

imgOutput.close();

inputStream = new ByteArrayInputStream(outputStream.toByteArray());

outputStream.close();

} catch (IOException e) {

e.printStackTrace();

}

return inputStream;

}

/**

* 利用随机数,随机生成一个Color颜色的对象

* @param fc

* @param bc

* @return颜色对象

*/

private Color getColor(int fc, int bc) {

if (fc > 255) {

fc = 255;

}

if (bc > 255) { bc = 255;

}

int r = fc random.nextInt(bc - fc);

int g = fc random.nextInt(bc - fc);

int b = fc random.nextInt(bc - fc);

return new Color(r, g, b);

}

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值