zxing qrcode,读取错误。 com.google.zxing.NotFoundException

时间:2015-01-12 13:04:14

标签: java zxing

我试图从jsp文件上传的图像文件中读取qrcode。为了阅读QRcode,我使用了zxing jar。

来自

代码

import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
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.EncodeHintType;
import com.google.zxing.MultiFormatReader;
import com.google.zxing.NotFoundException;
import com.google.zxing.Result;
import com.google.zxing.WriterException;
import com.google.zxing.client.j2se.BufferedImageLuminanceSource;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.common.HybridBinarizer;
import com.google.zxing.qrcode.QRCodeWriter;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;

public class GenerateQRCode {
public String readQRCode(String filePath, String charset)
          throws FileNotFoundException, IOException, NotFoundException {

        Hashtable hintMap = new Hashtable();
    hintMap.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.L);

    BinaryBitmap binaryBitmap = new BinaryBitmap(new HybridBinarizer(
        new BufferedImageLuminanceSource( ImageIO.read(new FileInputStream(filePath)))));

    **Result qrCodeResult = new MultiFormatReader().decode(binaryBitmap, hintMap);**
    return qrCodeResult.getText();
  }

}

这是尝试在字符串中获取qrcode值的方法"结果"。

String result = rr.readQRCode(tmpFile.getCanonicalPath(), "UTF-8");

以粗线显示上述调用方法中的以下错误。 com.google.zxing.NotFoundException

我已经在stackoverflow中找到了相同问题的重复。

http://stackoverflow.com/questions/27770665/error-when-decoding-qr-code

但没有适当的回应。这段代码会起作用吗?或者我应该寻找替代方案。我已经完成了生成qrcode的代码。从文件中读取代码是zxing的问题。

1 个答案:

答案 0 :(得分:0)

我有类似的问题,我发现了https://github.com/zxing/zxing/issues/216

您应该输入PURE_BARCODE提示。所以,你的代码应该是

// ...

Map<DecodeHintType, Object> hints = new EnumMap<>(DecodeHintType.class);
hints.put(DecodeHintType.PURE_BARCODE, true);

Result qrCodeResult = new MultiFormatReader().decode(binaryBitmap, hints);
return qrCodeResult.getText();

// ...