图片验证码的JAVA工具类

发布时间:2019-11-19 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了图片验证码的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 < lineCount; i++) {             int xs = random.nextInt(width);             int ys = random.nextInt(height);             int xe = xs + random.nextInt(width / 8);             int ye = ys + random.nextInt(height / 8);             red = random.nextInt(255);             green = random.nextInt(255);             blue = random.nextInt(255);             g.setColor(new Color(red, green, blue));             g.drawLine(xs, ys, xe, ye);         }         // randomCode记录随机产生的验证码         StringBuffer randomCode = new StringBuffer();         // 随机产生codeCount个字符的验证码。         for (int i = 0; i < codeCount; i++) {             String strRand = String.valueOf(codeSequence[random.nextInt(codeSequence.length)]);             // 产生随机的颜色值,让输出的每个字符的颜色值都将不同。             red = random.nextInt(255);             green = random.nextInt(255);             blue = random.nextInt(255);             g.setColor(new Color(red, green, blue));             g.drawString(strRand, (i + 1) * x, codeY);             // 将产生的四个随机数组合在一起。             randomCode.append(strRand);         }         // 将四位数字的验证码保存到Session中。         code = randomCode.toString();     }      public void write(String path,String fileName) throws IOException {         File folder = new File(path);         if(!folder.exists()){             folder.mkdirs();         }         OutputStream sos = new FileOutputStream(path+fileName);         this.write(sos);     }      public void write(OutputStream sos) throws IOException {         ImageIO.write(buffImg, "png", sos);         sos.close();     }      public BufferedImage getBuffImg() {         return buffImg;     }      public String getCode() {         return code;     }          public static void main(String[] args) {           ValidateCode vCode = new ValidateCode(120,40,5,50);           try {               String path="D:\report\image\code\";               System.out.println(vCode.getCode()+" >"+path);               vCode.write(path,new Date().getTime()+".png");           } catch (IOException e) {               e.printStackTrace();         }        }  }@H_512_428@ 

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

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工具类全部内容,希望文章能够帮你解决图片验证码的JAVA工具类所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。