代码之家  ›  专栏  ›  技术社区  ›  Ivan

com.google.zxing公司。使用zxing解码qrcode时出现NotFoundException

  •  0
  • Ivan  · 技术社区  · 8 年前

    我们正在使用zxing从图像中解码qrcode,大多数qrccode通常可以从原始图像中提取,但有些不能。我将展示解码器代码,我们一起讨论导致NotFoundException的原因并找出解决方案。

    首先,需要一些zxing依赖项:

    <dependency>
        <groupId>com.google.zxing</groupId>
        <artifactId>core</artifactId>
        <version>3.2.1</version>
    </dependency>
    
    <dependency>
      <groupId>com.google.zxing</groupId>
      <artifactId>javase</artifactId>
      <version>3.2.1</version>
    </dependency>
    

    然后查看详细代码:

     public static String decodeQrCode(BufferedImage image) throws DependencyServiceException
    {
        // Convert the image to a binary bitmap source
        LuminanceSource source = new BufferedImageLuminanceSource(image);
        BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));
    
        // Decode the barcode
        QRCodeReader reader = new QRCodeReader();
        Result result = null;
        try
        {
            result = reader.decode(bitmap);
        }
        catch (NotFoundException | ChecksumException | FormatException e)
        {
            throw new DependencyServiceException(e);
        }
        return result == null ? null : result.getText();
    }
    
    public static void main(String[] args)
    {
        File file = new File("/tmp/ivan_qr_code.jpg");
        String qrCodeOriginUrlExtracted = "";
        try
        {
            FileInputStream imageInFile = new FileInputStream(file);
            byte imageData[] = new byte[(int) file.length()];
            imageInFile.read(imageData);
    
            String qrCodeBase64 = Base64.encodeBase64URLSafeString(imageData);
            BufferedImage image = Base64StringToImageUtil.generateImageFromString(qrCodeBase64);
            qrCodeOriginUrlExtracted = QrCodeDecoderUtil.decodeQrCode(image);
            imageInFile.close();
        }
        catch (Exception e)
        {
            // TODO: handle exception
        }
        System.out.println(String.format("Extracted text from qr code: %1$s", qrCodeOriginUrlExtracted));
    }
    

    生成的错误:

    Exception in thread "main"  {"errorCode": "3000", "debugInfo":"null","message": "com.google.zxing.NotFoundException"}
    at com.waijule.common.util.image.QrCodeDecoderUtil.decodeQrCode(QrCodeDecoderUtil.java:44)
    at com.waijule.common.util.image.QrCodeDecoderUtil.main(QrCodeDecoderUtil.java:58)
    

    原因:com.google.zxing.NotFoundException

    模板qr代码如下:

    enter image description here

    1 回复  |  直到 8 年前
        1
  •  0
  •   Ivan    8 年前

    总的来说,解码方法取决于具体情况,DecodeHintType和条形码阅读器需要事先指定。请参阅的开放源代码 https://zxing.org/w/decode.jspx 从…起 zxing ,注意方法“processImage”。

    感谢这些天的关注者。