校验码图片

来源:互联网 发布:日本交友聊天软件 编辑:程序博客网 时间:2024/04/28 11:17

/**
 * <p>Title: 校验码图片</p>
 *
 * <p>Description: </p>
 *
 * <p>Copyright: Copyright (c) Karl Luo</p>
 *
 * <p>Company: SFStudio</p>
 *
 * @author Karl Luo
 * @version 1.0
 */
import java.io.*;
import java.awt.image.*;
import java.util.Hashtable;
import com.sun.image.codec.jpeg.*;

public class ValidationImage {
    private String validationCode = "";  //校验码
    private int validationCodeLength = 6; //校验码长度
    private int imWidth         = 114;  //图片宽度
    private int imHeight = 27;  //图片高度
    private String imType = "JPEG"; //图片类型
    private String imFileName = "";  //生成图片文件名称
   
    private BufferedImage  bufImg = null;
   
    private int wMatrix = 5;                    //数组宽度
    private int hMatrix = 7;                    //数组高度
    private int[][] char_1    = {{0,0,1,0,0},{0,1,1,0,0},{0,0,1,0,0},{0,0,1,0,0},{0,0,1,0,0},{0,0,1,0,0},{0,1,1,1,0}};
    private int[][] char_2    = {{0,1,1,1,0},{1,0,0,0,1},{0,0,0,0,1},{0,0,1,1,0},{0,1,0,0,0},{1,0,0,0,0},{1,1,1,1,1}};
    private int[][] char_3    = {{0,1,1,1,0},{1,0,0,0,1},{0,0,0,0,1},{0,1,1,1,0},{0,0,0,0,1},{1,0,0,0,1},{0,1,1,1,0}};
    private int[][] char_4    = {{1,0,0,0,1},{1,0,0,0,1},{1,0,0,0,1},{1,1,1,1,1},{0,0,0,0,1},{0,0,0,0,1},{0,0,0,0,1}};
    private int[][] char_5    = {{1,1,1,1,1},{1,0,0,0,0},{1,0,0,0,0},{1,1,1,1,0},{0,0,0,0,1},{1,0,0,0,1},{0,1,1,1,0}};
    private int[][] char_6    = {{0,1,1,1,0},{1,0,0,0,1},{1,0,0,0,0},{1,1,1,1,0},{1,0,0,0,1},{1,0,0,0,1},{0,1,1,1,0}};
    private int[][] char_7    = {{1,1,1,1,1},{1,0,0,0,1},{0,0,0,0,1},{0,0,0,1,0},{0,0,1,0,0},{0,0,1,0,0},{0,0,1,0,0}};
    private int[][] char_8    = {{0,1,1,1,0},{1,0,0,0,1},{1,0,0,0,1},{0,1,1,1,0},{1,0,0,0,1},{1,0,0,0,1},{0,1,1,1,0}};
    private int[][] char_9    = {{0,1,1,1,0},{1,0,0,0,1},{1,0,0,0,1},{0,1,1,1,1},{0,0,0,0,1},{1,0,0,0,1},{0,1,1,1,0}};
    private int[][] char_0    = {{0,1,1,1,0},{1,0,0,0,1},{1,0,0,1,1},{1,0,1,0,1},{1,1,0,0,1},{1,0,0,0,1},{0,1,1,1,0}};
   
    private int[][] char_A    = {{0,1,1,1,0},{1,0,0,0,1},{1,0,0,0,1},{1,0,0,0,1},{1,1,1,1,1},{1,0,0,0,1},{1,0,0,0,1}};
    private int[][] char_B    = {{1,1,1,1,0},{1,0,0,0,1},{1,0,0,0,1},{1,1,1,1,0},{1,0,0,0,1},{1,0,0,0,1},{1,1,1,1,0}};
    private int[][] char_C    = {{0,1,1,1,0},{1,0,0,0,1},{1,0,0,0,0},{1,0,0,0,0},{1,0,0,0,0},{1,0,0,0,1},{0,1,1,1,0}};
    private int[][] char_D    = {{1,1,1,1,0},{1,0,0,0,1},{1,0,0,0,1},{1,0,0,0,1},{1,0,0,0,1},{1,0,0,0,1},{1,1,1,1,0}};
    private int[][] char_E    = {{1,1,1,1,1},{1,0,0,0,0},{1,0,0,0,0},{1,1,1,1,0},{1,0,0,0,0},{1,0,0,0,0},{1,1,1,1,1}};
    private int[][] char_F    = {{1,1,1,1,1},{1,0,0,0,0},{1,0,0,0,0},{1,1,1,1,0},{1,0,0,0,0},{1,0,0,0,0},{1,0,0,0,0}};
    private int[][] char_G    = {{0,1,1,1,0},{1,0,0,0,1},{1,0,0,0,0},{1,0,1,1,1},{1,0,0,0,1},{1,0,0,0,1},{0,1,1,1,0}};
    private int[][] char_H    = {{1,0,0,0,1},{1,0,0,0,1},{1,0,0,0,1},{1,1,1,1,1},{1,0,0,0,1},{1,0,0,0,1},{1,0,0,0,1}};
    private int[][] char_I    = {{1,1,1,1,1},{0,0,1,0,0},{0,0,1,0,0},{0,0,1,0,0},{0,0,1,0,0},{0,0,1,0,0},{1,1,1,1,1}};
    private int[][] char_J    = {{0,0,0,0,1},{0,0,0,0,1},{0,0,0,0,1},{0,0,0,0,1},{0,0,0,0,1},{1,0,0,0,1},{0,1,1,1,0}};
    private int[][] char_K    = {{1,0,0,0,1},{1,0,0,1,0},{1,0,1,0,0},{1,1,0,0,0},{1,0,1,0,0},{1,0,0,1,0},{1,0,0,0,1}};
    private int[][] char_L    = {{1,0,0,0,0},{1,0,0,0,0},{1,0,0,0,0},{1,0,0,0,0},{1,0,0,0,0},{1,0,0,0,0},{1,1,1,1,1}};
    private int[][] char_M    = {{1,0,0,0,1},{1,1,0,1,1},{1,0,1,0,1},{1,0,0,0,1},{1,0,0,0,1},{1,0,0,0,1},{1,0,0,0,1}};
    private int[][] char_N    = {{1,0,0,0,1},{1,1,0,0,1},{1,0,1,0,1},{1,0,0,1,1},{1,0,0,0,1},{1,0,0,0,1},{1,0,0,0,1}};
    private int[][] char_O    = {{0,1,1,1,0},{1,0,0,0,1},{1,0,0,0,1},{1,0,0,0,1},{1,0,0,0,1},{1,0,0,0,1},{0,1,1,1,0}};
    private int[][] char_P    = {{1,1,1,1,0},{1,0,0,0,1},{1,0,0,0,1},{1,1,1,1,0},{1,0,0,0,0},{1,0,0,0,0},{1,0,0,0,0}};
    private int[][] char_Q    = {{0,1,1,1,0},{1,0,0,0,1},{1,0,0,0,1},{1,0,0,0,1},{1,0,0,0,1},{1,0,0,1,1},{0,1,1,1,1}};
    private int[][] char_R    = {{1,1,1,1,0},{1,0,0,0,1},{1,0,0,0,1},{1,1,1,1,0},{1,0,0,0,1},{1,0,0,0,1},{1,0,0,0,1}};
    private int[][] char_S    = {{0,1,1,1,0},{1,0,0,0,1},{1,0,0,0,0},{0,1,1,1,0},{0,0,0,0,1},{1,0,0,0,1},{0,1,1,1,0}};
    private int[][] char_T    = {{1,1,1,1,1},{0,0,1,0,0},{0,0,1,0,0},{0,0,1,0,0},{0,0,1,0,0},{0,0,1,0,0},{0,0,1,0,0}};
    private int[][] char_U    = {{1,0,0,0,1},{1,0,0,0,1},{1,0,0,0,1},{1,0,0,0,1},{1,0,0,0,1},{1,0,0,0,1},{0,1,1,1,0}};
    private int[][] char_V    = {{1,0,0,0,1},{1,0,0,0,1},{1,0,0,0,1},{0,1,0,1,0},{0,1,0,1,0},{0,0,1,0,0},{0,0,1,0,0}};
    private int[][] char_W    = {{1,0,0,0,1},{1,0,0,0,1},{1,0,0,0,1},{1,0,0,0,1},{1,0,1,0,1},{1,0,1,0,1},{0,1,0,1,0}};
    private int[][] char_X    = {{1,0,0,0,1},{1,0,0,0,1},{0,1,0,1,0},{0,0,1,0,0},{0,1,0,1,0},{1,0,0,0,1},{1,0,0,0,1}};
    private int[][] char_Y    = {{1,0,0,0,1},{1,0,0,0,1},{0,1,0,1,0},{0,0,1,0,0},{0,0,1,0,0},{0,0,1,0,0},{0,0,1,0,0}};
    private int[][] char_Z    = {{1,1,1,1,1},{0,0,0,0,1},{0,0,0,1,0},{0,0,1,0,0},{0,1,0,0,0},{1,0,0,0,0},{1,1,1,1,1}};

    private Hashtable charMatrixTable   = null;
    /**
     * 初始化字符数组,保存到哈西表中!
     */
    private void InitCharMatrix(){
        charMatrixTable = new Hashtable();
        charMatrixTable.put("1", char_1);
        charMatrixTable.put("2", char_2);
        charMatrixTable.put("3", char_3);
        charMatrixTable.put("4", char_4);
 charMatrixTable.put("5", char_5);
        charMatrixTable.put("6", char_6);
 charMatrixTable.put("7", char_7);
        charMatrixTable.put("8", char_8);
 charMatrixTable.put("9", char_9);
        charMatrixTable.put("0", char_0);

        charMatrixTable.put("A", char_A);
        charMatrixTable.put("B", char_B);
 charMatrixTable.put("C", char_C);
        charMatrixTable.put("D", char_D);
 charMatrixTable.put("E", char_E);
        charMatrixTable.put("F", char_F);
        charMatrixTable.put("G", char_G);
 charMatrixTable.put("H", char_H);
        charMatrixTable.put("I", char_I);
 charMatrixTable.put("J", char_J);
        charMatrixTable.put("K", char_K);
 charMatrixTable.put("L", char_L);
        charMatrixTable.put("M", char_M);
 charMatrixTable.put("N", char_N);
        charMatrixTable.put("O", char_O);
 charMatrixTable.put("P", char_P);
        charMatrixTable.put("Q", char_Q);
 charMatrixTable.put("R", char_R);
        charMatrixTable.put("S", char_S);
 charMatrixTable.put("T", char_T);
        charMatrixTable.put("U", char_U);
        charMatrixTable.put("V", char_V);
 charMatrixTable.put("W", char_W);
 charMatrixTable.put("X", char_X);
 charMatrixTable.put("Y", char_Y);
 charMatrixTable.put("Z", char_Z);
    }
   
    /**
     * 构造函数
     */
    public ValidationImage(String imFileName) {
     this.validationCode = this.GetNewValidationCode();
        this.imFileName  = imFileName;
        this.Init();
    }
    /**
     * 构造函数
     * @param validationCode String
     */
    public ValidationImage(String validationCode,String imFileName){
        this.validationCode  = validationCode;
        this.imFileName  = imFileName;
        this.Init();
    }

    /**
     * 初始化
     */
    private void Init(){
        try{
            this.InitCharMatrix();
            this.getNewImage();
            this.DrawValidationCode();
            this.OutputImage(this.imFileName);
        }catch(Exception e){
            System.out.println("ERROR");
        }
    }

    /**
     * 生成校验码,不实现,由PHP程序实现
     * @return String
     */
    private String GetNewValidationCode(){
        return "JDK142";
    }
    /**
     * 创建Image
     * @return boolean
     */
    private void getNewImage(){
        this.bufImg = new BufferedImage(this.imWidth,this.imHeight,BufferedImage.TYPE_3BYTE_BGR);
    }
    /**
     *  根据字符得到点阵图
     *  @return int[][]
     */
    private int[][] getCharMatrix(char c){
        int[][] cm  = (int[][])this.charMatrixTable.get(String.valueOf(c));
        return cm;
    }
    /**
     * 画校验码到图片
     *
     */
    private void DrawValidationCode(){
        if((this.validationCode == "")||(this.bufImg == null)){
            return;
        }
                       
        int[] rgbArray  = {-1,-1,-1};
        for(int i=0;i<this.validationCodeLength;i++){
            char c  = this.validationCode.charAt(i);
            int[][] cm  = this.getCharMatrix(c);
            if(cm != null){
                for(int j=0;j<this.hMatrix;j++){
                    for(int k=0;k<this.wMatrix;k++){
                        int xImg    = (i+1)*3+k*3+i*5*3;
                        int yImg    = (j+1)*3;

                        if(cm[j][k] == 1){
                            bufImg.setRGB(xImg,yImg,2,2, rgbArray,0,0);
                        }

                    }
                }
            }
        }
    }
    /**
     * 输出Image文件
     * @param fileName String
     * @param fileType String
     * @return boolean
     * @throws IOException
     */
    private void OutputImage(String fileName) throws IOException{
        if(this.bufImg != null){
            FileOutputStream outputstream    = new FileOutputStream(fileName);
            JPEGEncodeParam jepgPara = JPEGCodec.getDefaultJPEGEncodeParam(this.bufImg);
            jepgPara.setQuality(0.75F,true);
            JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(outputstream);
            encoder.encode(this.bufImg, jepgPara);
        }
    }
   
    public static void main(String[] args) {
        String validCode = args[0];
        String imFileName = args[1];
       
        if((validCode != null)&&(imFileName != null)){
            ValidationImage image = new ValidationImage(validCode,imFileName);
        }
    }
}

原创粉丝点击