图片验证码的JAVA工具类

我们平时开发时经常会遇到需要图片验证码,基础的验证码包括了数字、字母、甚至可能有汉字。下面我给出一个简单的工具类。

package com..ankang.tony.util;import java.awt.Color;import java.awt.Font;import java.awt.Graphics2D;import java.awt.image.BufferedImage;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.OutputStream;import java.util.Date;import java.util.Random;import javax.imageio.ImageIO;/  * 验证码生成器 */public class ValidateCode {    // 图片的宽度。    private int width = 160;    // 图片的高度。    private int height = 40;    // 验证码字符个数    private int codeCount = 5;    // 验证码干扰线数    private int lineCount = 150;    // 验证码    private static String code = null;    // 验证码图片Buffer    private BufferedImage buffImg = null;    private char[] codeSequence = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K', 'L', 'M', 'N', 'P', 'Q', 'R',            'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '2', '3', '4', '5', '6', '7', '8', '9' };    public ValidateCode() {        this.createCode();    }    /      *      * @param width     *            图片宽     * @param height     *            图片高     */    public ValidateCode(int width, int height) {        this.width = width;        this.height = height;        this.createCode();    }    /      *      * @param width     *            图片宽     * @param height     *            图片高     * @param codeCount     *            字符个数     * @param lineCount     *            干扰线条数     */    public ValidateCode(int width, int height, int codeCount, int lineCount) {        this.width = width;        this.height = height;        this.codeCount = codeCount;        this.lineCount = lineCount;        this.createCode();    }    public void createCode() {        int x = 0, fontHeight = 0, codeY = 0;        int red = 0, green = 0, blue = 0;        x = width / (codeCount + 1);// 每个字符的宽度        fontHeight = height - 2;// 字体的高度        codeY = height - 3;        // 图像buffer        buffImg = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);        Graphics2D g = buffImg.createGraphics();        // 生成随机数        Random random = new Random();        // 将图像填充为白色        g.setColor(Color.WHITE);        g.fillRect(0, 0, width, height);        // 创建字体        ImgFontByte imgFont = new ImgFontByte();        Font font = imgFont.getFont(fontHeight);        g.setFont(font);        for (int i = 0; i "+path);              vCode.write(path,new Date().getTime()+".png");          } catch (IOException e) {              e.printStackTrace();        }       }}

下面这个类主要是用作字体的设置,大家也可以直接拿过来用。

package com.ankang.tony.util;import java.awt.Font;import java.io.ByteArrayInputStream;public class ImgFontByte {     public Font getFont(int fontHeight){              try {                  Font baseFont = Font.createFont(Font.ITALIC, new ByteArrayInputStream(hex2byte(getFontByteStr())));                 return baseFont.deriveFont(Font.PLAIN, fontHeight);              } catch (Exception e) {                  return new Font("Consola",Font.PLAIN, fontHeight);              }          }          private  byte[] hex2byte(String str) {               if (str == null)                  return null;              str = str.trim();              int len = str.length();              if (len == 0 || len % 2 == 1)                  return null;              byte[] b = new byte[len / 2];              try {                  for (int i = 0; i < str.length(); i += 2) {                      b[i/2] = (byte) Integer.decode("0x" + str.substring(i, i + 2)).intValue();                  }                  return b;              } catch (Exception e) {                  return null;              }          }      /        * ttf字体文件的十六进制字符串       * @return       */       private String getFontByteStr(){          return null;       }  }

关键字:java, 验证码


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部