條形碼編碼與解碼

package com.wondersgroup.zXing;
import java.awt.image.BufferedImage;  
import java.io.File;  
  
import javax.imageio.ImageIO;  
  
import com.google.zxing.BarcodeFormat;  
import com.google.zxing.BinaryBitmap;  
import com.google.zxing.LuminanceSource;  
import com.google.zxing.MultiFormatReader;  
import com.google.zxing.MultiFormatWriter;  
import com.google.zxing.Result;  
import com.google.zxing.client.j2se.BufferedImageLuminanceSource;  
import com.google.zxing.client.j2se.MatrixToImageWriter;  
import com.google.zxing.common.BitMatrix;  
import com.google.zxing.common.HybridBinarizer;  
    
/**  
 * @blog http://sjsky.iteye.com  
 * @author Michael  
 */    
public class BarCodeTest {    
    
    /**  
     * 編碼  
     * @param contents  
     * @param width  
     * @param height  
     * @param imgPath  
     */    
    public void encode(String contents, int width, int height, String imgPath) {    
        int codeWidth = 3 + // start guard    
                (7 * 6) + // left bars    
                5 + // middle guard    
                (7 * 6) + // right bars    
                3; // end guard    
        codeWidth = Math.max(codeWidth, width);    
        try {    
            BitMatrix bitMatrix = new MultiFormatWriter().encode(contents,    
                    BarcodeFormat.EAN_13, codeWidth, height, null);    
    
            MatrixToImageWriter    
                    .writeToFile(bitMatrix, "png", new File(imgPath));    
    
        } catch (Exception e) {    
            e.printStackTrace();    
        }    
    }    
      
    /**  
     * @param imgPath  
     * @return String  
     */    
    public String decode(String imgPath) {    
        BufferedImage image = null;    
        Result result = null;    
        try {    
            image = ImageIO.read(new File(imgPath));    
            if (image == null) {    
                System.out.println("the decode image may be not exit.");    
            }    
            LuminanceSource source = new BufferedImageLuminanceSource(image);    
            BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));    
    
            result = new MultiFormatReader().decode(bitmap, null);    
            return result.getText();    
        } catch (Exception e) {    
            e.printStackTrace();    
        }    
        return null;    
    }  
    
    /**  
     * @param args  
     */    
    public static void main(String[] args) {    
        String imgPath = "K:\\二維碼\\images\\zxing_EAN13.png";    
        // 益達無糖口香糖的條形碼    
        String contents = "6923450657713";    
    
        int width = 105, height = 50;    
        BarCodeTest handler = new BarCodeTest();    
        handler.encode(contents, width, height, imgPath);    
        String decode = handler.decode(imgPath);  
        System.out.println(decode);  
        System.out.println("Finished!!!");    
    }    
}   

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章