JAVA生成图片验证码API

 效果图:

/**
 * 生成JPG格式的图片验证验证码,存入图片缓冲区BufferedImage
 *
 * @author YangBin
 */
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Random;
class CodeImage {  
    private int height = 35;
    private int width = 70;
    private int num = 4;
    private int fontSize = 15;
    private StringBuilder sb = new StringBuilder();
    private String[] fontName = {"宋体","华文楷体","黑体","微软雅黑"};
    Random rd = new Random();
    
    /** 
     * @return 获取当前二维码图片的长度
     */
    public int getWidth() {
        return width;
    }
    /**
     * @param 设置二维码图片的长度
     */
    public void setWidth(int width) {
        this.width = width;
    }
    /** 
     * @return 获取当前二维码图片的高度
     */
    public int getHeight() {
        return height;
    }
    /**
     * @param heigh 设置二维码图片的高度
     */
    public void setHeight(int height) {
        this.height = height;
    }
    /**
     * @return 返回二维码字符个数
     */
    public int getNum() {
        return num;
    }
    /**
     * @param num 设置二维码的字符个数.
     */
    public void setNum(int num) {
        this.num = num;
    }
    /**
     * @return 当前二维码字体的大小
     */
    public int getFontSize() {
        return fontSize;
    }
    /**
     * @param 获取二维码字体大小
     */
    public void setFontSize(int fontSize) {
        this.fontSize = fontSize;
    }
    /**
     * @return 返回当前生成的二维码的内容
     */
    public String getText(){
        return sb.toString();
    }
    
    /**  
     * @return 返回一个图片缓冲区对象 BufferedImage 包含了绘制完成的图片.
     */
    public BufferedImage getBufferedImage () {
        BufferedImage bi = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
        Graphics2D g = (Graphics2D)bi.getGraphics();
        g.setColor(Color.WHITE);
        g.fillRect(0, 0, width, height);
        sb.delete(0, num);
        for(int i=0;i<num;i++ ){
            g.setColor(getColor());
            g.setFont(getFont());
            randomLine(g);
            String s = getStr();
            sb.append(s);
            g.drawString(s, i*(width/num), height/2+rd.nextInt(height/2));
        }
        return bi;
    }
    
    /**
     * @return 一个随机颜色的Color
     */
    public Color getColor() {       
        return new Color(rd.nextInt(255),rd.nextInt(255),rd.nextInt(255));
    }
    
    /**
     * @return 一个随记的数字或者字母
     */
    public String getStr() {
        String s = "23456789abcdefghigkmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
        String ch = String.valueOf(s.charAt(rd.nextInt(s.length())));
        return ch;
    }
    
    /**
     * 绘制一条任意的线
     * @param 画笔对象
     */
    public void randomLine(Graphics2D g) {
        int ax = rd.nextInt(width), ay = rd.nextInt(height);
        int bx = rd.nextInt(width), by = rd.nextInt(height);
        g.drawLine(ax, ay, bx, by);
    }
    
    /**
     * @return 返回一个字体大小和字体随记.
     */
    public Font getFont() { 
        return new Font(fontName[rd.nextInt(fontName.length)],rd.nextInt(4),rd.nextInt(10)+fontSize);
    }
}

测试:将生成的图片写入的本地磁盘

public class CreatImage {

	/*
	 * 创建图片;
	 */
	public static void main(String[] args) {
		/*
		 *  Image / ImageIo / BufferedImage / Icon / ImageIcon
		 */
		CodeImage c = new CodeImage();
		
		BufferedImage bi = c.getBufferedImage();
		
		System.out.println(c.getText());
		try {
			
			ImageIO.write(bi, "JPG", new FileOutputStream("E:/abc.jpg"));
		
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} 
		
		
	}
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值