我正在尝试使用 Zxing API 为客户在我们网站上上传的 aadhar 图像解码印度 aadhar 卡中的二维码。
如果二维码很大,我可以解码它并获得完整的 XML 数据。然而,尺寸较小的二维码不会被解码为二维码。它们被解码为 BarcodeFormat.UPC_E,它是一维条码,不同于二维码 QR 码。因此,小型 QR 码的输出类似于 04400621,而不是预期的 XML 输出。在线工具https://zxing.org/w/decode.jspx也会发生这种情况。
如果我们仅裁剪 aadhar 的 QR 码部分,一些小的 QR 码会被在线工具解码,但如果我们传递小图像的裁剪部分,API 将无法解码。
我正在使用 com.google.zxing.MultiFormatReader 类中的以下 API
结果解码(BinaryBitmap 图像,地图提示)
在 MultiFormatReader 库中放置断点,我可以看到 QRCodeReader 无法解码 QR 码,但是 MultiFormatOneDReader 能够解码相同的。
因此,小 QR 码似乎被解码为 BarcodeFormat.UPC_E。
粘贴下面的代码片段:
String filePath = "xyz";
File file = new File(filePath);
FileInputStream fileInputStream = new FileInputStream(filePath);
BufferedImage bufferedImage = ImageIO.read(fileInputStream);
LuminanceSource bufferedImageLuminanceSource = new BufferedImageLuminanceSource(bufferedImage);
BinaryBitmap binaryBitmap = new BinaryBitmap(new HybridBinarizer(bufferedImageLuminanceSource));
Map<DecodeHintType, Object> tmpHintsMap = new EnumMap<DecodeHintType, Object>(
DecodeHintType.class);
tmpHintsMap.put(DecodeHintType.TRY_HARDER, Boolean.TRUE);
tmpHintsMap.put(DecodeHintType.POSSIBLE_FORMATS,
EnumSet.allOf(BarcodeFormat.class));
tmpHintsMap.put(DecodeHintType.CHARACTER_SET, "ISO-8859-1");
tmpHintsMap.put(DecodeHintType.PURE_BARCODE, Boolean.FALSE);(tried with and without this option)
Result result = new MultiFormatReader().decode(binaryBitmap, tmpHintsMap);