R-B 发表于 2015-07-06 14:16

java 二维码+条形码解码+生成 zxing

二维码条形码类库 感觉很好用

首先下载 gradle
//二维码
      'com.google.zxing:core:3.2.0',
      'com.google.zxing:javase:3.2.0'
      // android-core
      //'com.google.zxing:android-core:3.2.0'

ZxingEAN13Handler.javapackage com.sniper.survey.util;

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;

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;

public class ZxingEAN13Handler {
    /**
   * 条形码编码
   *
   * @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.writeToStream(bitMatrix, "png",
                  new FileOutputStream(imgPath));

      } catch (Exception e) {
            e.printStackTrace();
      }
    }

    /**
   * 解析条形码
   *
   * @param imgPath
   * @return
   */
    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;
    }
   
    public static void main(String[] args) {
      String imgPath = "/home/sniper/桌面/zxing_EAN13.png";
      // 益达无糖口香糖的条形码
      String contents = "6923450657713";
   
      int width = 105, height = 50;
      ZxingEAN13Handler handler = new ZxingEAN13Handler();
      handler.encode(contents, width, height, imgPath);
   
      System.out.println("Michael ,you have finished zxing EAN13 encode.");
    }
}ZxingHandler.javapackage com.sniper.survey.util;

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.util.Hashtable;
import java.util.Map;

import javax.imageio.ImageIO;

import com.google.zxing.BarcodeFormat;
import com.google.zxing.BinaryBitmap;
import com.google.zxing.DecodeHintType;
import com.google.zxing.EncodeHintType;
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;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;

/**
* 二维码生成器
*
* @blog http://sjsky.iteye.com
* @author Michael
*/
public class ZxingHandler {

    /**
   * 生成二维码
   *
   * @param contents
   * @param width
   * @param height
   * @param imgPath
   */
    public void encode(String contents, int width, int height, String imgPath) {
      Map<EncodeHintType, Object> hints = new Hashtable<>();
      // 指定纠错等级
      hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.L);
      // 指定编码格式
      hints.put(EncodeHintType.CHARACTER_SET, "GBK");
      try {
            BitMatrix bitMatrix = new MultiFormatWriter().encode(contents,
                  BarcodeFormat.QR_CODE, width, height, hints);

            MatrixToImageWriter.writeToStream(bitMatrix, "png",
                  new FileOutputStream(imgPath));

      } catch (Exception e) {
            e.printStackTrace();
      }
    }

    /**
   * 解析二维码
   *
   * @param imgPath
   * @return
   */
    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));

            Map<DecodeHintType, Object> hints = new Hashtable<>();
            hints.put(DecodeHintType.CHARACTER_SET, "GBK");

            result = new MultiFormatReader().decode(bitmap, hints);
            return result.getText();
      } catch (Exception e) {
            e.printStackTrace();
      }
      return null;
    }

}
页: [1]
查看完整版本: java 二维码+条形码解码+生成 zxing