ZXing是一個開源Java類庫用於解析多種格式的條碼和二維碼.
官網:http://code.google.com/p/zxing/
截止目前為止最新版本為1.7,提供以下編碼格式的支援: UPC-A and UPC-E EAN-8 and EAN-13 Code 39 Code 93 Code 128 QR Code ITF Codabar RSS-14 (all variants) Data Matrix PDF 417 ('alpha' quality) Aztec ('alpha' quality)
同時官網提供了 Android、cpp、C#、iPhone、j2me、j2se、jruby、objc、rim、symbian等多種應用的類庫,具體詳情可以參考下載的源碼包中。
範例程式碼需要使用的jar包ZXing-2.0.zip下面的core.jar,javase.jar。
二維碼編碼,解碼
import java.io.File;import java.util.Hashtable;import com.google.zxing.BarcodeFormat;import com.google.zxing.EncodeHintType;import com.google.zxing.MultiFormatWriter;import com.google.zxing.client.j2se.MatrixToImageWriter;import com.google.zxing.common.BitMatrix;import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;/** * @blog http://sjsky.iteye.com * @author Michael */public class ZxingEncoderHandler {/** * 編碼 * * @param contents * @param width * @param height * @param imgPath */public void encode(String contents, int width, int height, String imgPath) {Hashtable<EncodeHintType, Object> hints = new Hashtable<EncodeHintType, Object>();// 指定錯誤修正等級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.writeToFile(bitMatrix, "png", new File(imgPath));} catch (Exception e) {e.printStackTrace();}}/** * @param args */public static void main(String[] args) {String imgPath = "zxing.png";String contents = "Hello Michael(大大),welcome to Zxing!"+ "\nMichael’s blog [ http://sjsky.iteye.com ]"+ "\nEMail [ sjsky007@gmail.com ]" + "\nTwitter [ @suncto ]";int width = 300, height = 300;ZxingEncoderHandler handler = new ZxingEncoderHandler();handler.encode(contents, width, height, imgPath);System.out.println("Michael ,you have finished zxing encode.");}}
import java.awt.image.BufferedImage; import java.io.File; import java.util.Hashtable; import javax.imageio.ImageIO; import com.google.zxing.BinaryBitmap; import com.google.zxing.DecodeHintType; import com.google.zxing.LuminanceSource; import com.google.zxing.MultiFormatReader; import com.google.zxing.Result; import com.google.zxing.client.j2se.BufferedImageLuminanceSource; import com.google.zxing.common.HybridBinarizer; /** * @blog http://sjsky.iteye.com * @author Michael */ public class ZxingDecoderHandler { /** * @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)); Hashtable<DecodeHintType, Object> hints = new Hashtable<DecodeHintType, Object>(); hints.put(DecodeHintType.CHARACTER_SET, "GBK"); result = new MultiFormatReader().decode(bitmap, hints); return result.getText(); } catch (Exception e) { e.printStackTrace(); } return null; } /** * @param args */ public static void main(String[] args) { String imgPath = "zxing.png"; ZxingDecoderHandler handler = new ZxingDecoderHandler(); String decodeContent = handler.decode(imgPath); System.out.println("解碼內容如下:"); System.out.println(decodeContent); System.out.println("Michael ,you have finished zxing decode."); } }
條碼的編碼,解碼
import java.io.File; import com.google.zxing.BarcodeFormat; import com.google.zxing.MultiFormatWriter; import com.google.zxing.client.j2se.MatrixToImageWriter; import com.google.zxing.common.BitMatrix; /** * @blog http://sjsky.iteye.com * @author Michael */ public class ZxingEAN13EncoderHandler { /** * 編碼 * @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 args */ public static void main(String[] args) { String imgPath = "zxing_EAN13.png"; // 益達無糖口香糖的條碼 String contents = "6923450657713"; int width = 105, height = 50; ZxingEAN13EncoderHandler handler = new ZxingEAN13EncoderHandler(); handler.encode(contents, width, height, imgPath); System.out.println("Michael ,you have finished zxing EAN13 encode."); } }
import java.awt.image.BufferedImage; import java.io.File; import javax.imageio.ImageIO; import com.google.zxing.BinaryBitmap; import com.google.zxing.LuminanceSource; import com.google.zxing.MultiFormatReader; import com.google.zxing.Result; import com.google.zxing.client.j2se.BufferedImageLuminanceSource; import com.google.zxing.common.HybridBinarizer; /** * @blog http://sjsky.iteye.com * @author Michael */ public class ZxingEAN13DecoderHandler { /** * @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 = "zxing_EAN13.png"; ZxingEAN13DecoderHandler handler = new ZxingEAN13DecoderHandler(); String decodeContent = handler.decode(imgPath); System.out.println("解碼內容如下:"); System.out.println(decodeContent); System.out.println("Michael ,you have finished zxing EAN-13 decode."); } }