简单的中文图片验证码的生成

来源:互联网 发布:南昌java培训费用 编辑:程序博客网 时间:2024/06/05 03:02
package com.zhuke;import java.awt.Graphics2D;import java.awt.image.BufferedImage;import java.io.File;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.UnsupportedEncodingException;import java.util.Random;import javax.imageio.ImageIO;public class Test {public static void main(String[] args) throws FileNotFoundException, IOException {//生成随机汉字String s = new Test().generateString(4);//新建图像缓存对象BufferedImage img = new BufferedImage(100, 50, BufferedImage.TYPE_INT_RGB);//得到Graphics2D对象,用于在图片上进行绘图Graphics2D g2d = img.createGraphics();//绘制文字g2d.drawString(s, 30,20);//释放G2D的全部资源g2d.dispose();//将图片缓存写入文件中ImageIO.write(img, "JPEG", new FileOutputStream(new File("test.jpg")));}/** * 随机生成指定长度的随机汉字 *  * @param length *            生成的中文字符串的长度 * @return 随机字符串 */public String generateString(int length) {String s = "";for (int i = 0; i < length; i++) {// 16-55区为一级汉字(3755个最常用的汉字,按拼音字母的次序排列),生成常用的汉字的高位码int highPos = 176 + new Random().nextInt(39);// 生成低位码int lowPos = 161 + new Random().nextInt(93);// 将生成的区位码存储在字节数组中,用于生成汉字byte[] b = new byte[] { new Integer(highPos).byteValue(),new Integer(lowPos).byteValue() };try {s = s + new String(b, "GBK");} catch (UnsupportedEncodingException e) {// TODO Auto-generated catch blocke.printStackTrace();}}return s;}}

0 0