1-1. ZXing是一个开源Java类库用于解析多种格式的条形码和二维码.
官网:http://code.google.com/p/zxing/
提供以下编码格式的支持:
同时官网提供了 Android、cpp、C#、iPhone、j2me、j2se、jruby、objc、rim、symbian等多种应用的类库,具体详情可以参考下载的源码包中。
可以将文档中core、javase文件夹中的源码打包成jar供如下使用:
package org.hz.recode; import java.awt.image.BufferedImage; import java.io.File; import java.util.Hashtable; 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; public class ZxingHandler { /** * 编码 * @param contents * @param width * @param height * @param imgPath */ public void encode(String contents, int width, int height, String imgPath) { Hashtable<Object, Object> hints = new Hashtable<Object, 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 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<Object, Object> hints = new Hashtable<Object, 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 = "d:/michael_zxing.png"; String contents = "Hi! welcome to Zxing!"; int width = 300, height = 300; ZxingHandler encodeHandler = new ZxingHandler(); encodeHandler.encode(contents, width, height, imgPath); ZxingHandler decodeDandler = new ZxingHandler(); String decodeContent = decodeDandler.decode(imgPath); System.out.println("解码内容如下:"); System.out.println(decodeContent); } }