我试图通过ZXing 2.1库获得成功的结果。我在Mac OS X 10.7.5上使用Java 1.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
答案 0 :(得分:1)
我在开始时遇到了类似的问题,但传递提示为我解决了这个问题。
您可以先尝试传递TRY_HARDER
。它应该工作。如果没有,则尝试传递POSSIBLE_FORMATS
提示,因为您已经知道格式。检查并查看两个提示是否都有效。
答案 1 :(得分:0)
从简要地看一下,我认为问题在于两边都没有足够的静区。规范IIRC需要左右9个模块,大约有2个。
检测器相当宽松,但不是那么多,以避免误报。通常情况下,图像外部的区域被视为一个白色的大平面(事实上,这些扫描就像这个页面一样在白色背景上很好),因此它会扫描。对于这种格式,我在代码中看到一个注释,它被特别禁用以避免误报。
你可以尝试禁用它或生成更宽的代码来测试它。如果你发现一个改变不会增加测试集中的误报,但会通过,那可能值得提交。