ZXing二维码和条形码
生活随笔
收集整理的這篇文章主要介紹了
ZXing二维码和条形码
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
工具類:
package com.wfz.zxing;import com.google.zxing.*; 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;import javax.imageio.ImageIO; import java.awt.image.BufferedImage; import java.io.File; import java.io.FileOutputStream; import java.util.Hashtable; import java.util.Map;/*** Created by Liang on 5/3/2017.*/ public class ZxingUtils {/*** 生成二維碼** @param contents* @param width* @param height* @param imgPath*/public void encodeQRCode(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 decodeQRCode(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;}/*** 生成條形碼** @param contents* @param width* @param height* @param imgPath*/// int width = 105, height = 50; 長度很容易報錯:NotFoundExceptionpublic void encodeBarCode(String contents, int width, int height, String imgPath) {int codeWidth = 3 + // start guard(7 * 6) + // left bars5 + // middle guard(7 * 6) + // right bars3; // end guardcodeWidth = 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 decodeBarCode(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.PURE_BARCODE, Boolean.TRUE);hints.put(DecodeHintType.CHARACTER_SET, "utf-8");result = new MultiFormatReader().decode(bitmap, hints);*/result = new MultiFormatReader().decode(bitmap, null);return result.getText();} catch (Exception e) {e.printStackTrace();}return null;}}測試:特別注意 高寬 容易報錯:NotFoundException
public static void main(String[] args) throws Exception {String imgPath = "D:\\test.png";// 益達(dá)無糖口香糖的條形碼String contents = "6923450657713";int width = 105, height = 50;ZxingUtils handler = new ZxingUtils();handler.encodeBarCode(contents, width, height, imgPath);String barcode = handler.decodeBarCode(imgPath);System.out.println(barcode);handler.encodeQRCode("abc123中文@#\\", 200, 200, imgPath);String qrcode = handler.decodeQRCode(imgPath);System.out.println(qrcode);}?jar下載地址:zxing.jar
轉(zhuǎn)載于:https://www.cnblogs.com/manusas/p/6801436.html
總結(jié)
以上是生活随笔為你收集整理的ZXing二维码和条形码的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [Erlang危机](5.1.1)内存
- 下一篇: 对于javaScript闭包,立即执行函