Java ZXing 2.1:com.google.ZXing.NotFoundException

Java ZXing 2.1:com.google.ZXing.NotFoundException,java,exception,barcode,zxing,Java,Exception,Barcode,Zxing,我正在尝试使用2.1库获得成功的结果。我在MacOSX10.7.5上使用Java1.6。我能够编码文本,但不能解码任何图像。相反,我得到的只是com.google.zxing.NotFoundException的一行堆栈跟踪 这似乎很简单,但我不知道我做错了什么。下面是一个简单的测试。它将一对条形码编码为图像,然后从存储器中解码图像: public class App { public static void main(String[] args) { // Try

我正在尝试使用2.1库获得成功的结果。我在MacOSX10.7.5上使用Java1.6。我能够编码文本,但不能解码任何图像。相反,我得到的只是
com.google.zxing.NotFoundException
的一行堆栈跟踪

这似乎很简单,但我不知道我做错了什么。下面是一个简单的测试。它将一对条形码编码为图像,然后从存储器中解码图像:

public class App {

    public static void main(String[] args) {

        // Try UPC-A.
        try {
            testEncodeDecode(BarcodeFormat.UPC_A, "012345678905");  // Valid UPC-A.
        } catch (Exception e) {
            e.printStackTrace();
        }

        // Try EAN-13.
        try {
            testEncodeDecode(BarcodeFormat.EAN_13, "9310779300005");  // Valid EAN-13.
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void testEncodeDecode(BarcodeFormat barcodeFormat, String text)
        throws WriterException, NotFoundException, ChecksumException, FormatException, IOException {

        // Size of buffered image.
        int width = 200;
        int height = 100;

        // Encode to buffered image.
        Writer writer = new MultiFormatWriter();
        BitMatrix bitMatrix = writer.encode(text, barcodeFormat, width, height);
        BufferedImage bufferedImage = MatrixToImageWriter.toBufferedImage(bitMatrix);

        // Write to disk for debugging.
        String formatName = "png";
        File outputFile = new File(text + "." + formatName);    
        ImageIO.write(bufferedImage, formatName, outputFile);

        // Decode from buffered image.
        LuminanceSource source = new BufferedImageLuminanceSource(bufferedImage);
        BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));
        Reader reader = new MultiFormatReader();
        Result result = reader.decode(bitmap);

        // Never gets this far!
        System.out.println("result=" + result.getText());
    }
}
输出将是简单的

com.google.zxing.NotFoundException
com.google.zxing.NotFoundException
我被难住了!谢谢你的帮助。附上输出图像供您参考

UPC-A
EAN-13

简单地看一下,我认为问题在于两边没有足够的安静区。该规范IIRC要求左右各有9个模块,这个模块大约有2个

检测器相当宽大,但不太多,以避免误报。通常情况下,图像外部的区域被视为一个大的白色平面(实际上,在像这页这样的白色背景上,这些扫描很好),所以它会扫描。对于这种格式,我在代码中看到一个注释,这是专门禁用的,以避免误报


您可以尝试禁用它或生成更广泛的代码来测试它。如果您发现一个更改不会增加测试集中的误报率,但通过了测试,这可能是值得的。

我在开始时遇到了类似的问题,但通过提示解决了这个问题。
你可以试着先通过
再努力一点
。它应该会起作用。如果没有,请尝试传递
可能的\u格式
提示,因为您已经知道这些格式。检查并查看这两个提示是否都有效。

保存并共享您正在生成的图像--那里可能出了问题。当然可以。图片已附加,代码现在反映了这一步。你能重现我的问题吗?如何修改代码以实现您的建议?我在课堂文档中找不到任何东西。谢谢没有文件记录,这是黑客行为。以EAN13阅读器为例。我认为更好的解决方案是生成一个具有足够安静区域的代码。如果您没有修改代码的经验,不要担心尝试修改它。