无法使用 apache camel 读取条形码
您好,我尝试使用以下代码从图像中读取条码,但我无法读取该文件,因为它包含多个条码.有什么解决办法吗?
Hi i have tried to read a barcode from image using below code but i am unable to read the file as it contains multiple barcodes. Is there any work around for this?
@GetMapping(value = "OCR/Apachecamel")
@ApiOperation(value = "Get result from Barcode Apachecamel library")
public BarcodeInfo GetApachecamelResult() throws Exception {
try {
InputStream barCodeInputStream = new FileInputStream("images/multiple.png");
BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(
new BufferedImageLuminanceSource(ImageIO.read(barCodeInputStream))));
if (bitmap.getWidth() < bitmap.getHeight()) {
if (bitmap.isRotateSupported()) {
bitmap = bitmap.rotateCounterClockwise();
}
}
return decode(bitmap);
} catch (IOException e) {
throw new BarcodeDecodingException(e);
}
}
private BarcodeInfo decode(BinaryBitmap bitmap) throws BarcodeDecodingException {
Reader reader = new MultiFormatReader();
try {
Result result = reader.decode(bitmap);
return new BarcodeInfo(result.getText(), result.getBarcodeFormat().toString());
} catch (Exception e) {
throw new BarcodeDecodingException(e);
}
}
public static class BarcodeInfo {
private final String text;
private final String format;
public String getText() {
return text;
}
public String getFormat() {
return format;
}
BarcodeInfo(String text, String format) {
this.text = text;
this.format = format;
}
}
public static class BarcodeDecodingException extends Exception {
BarcodeDecodingException(Throwable cause) {
super(cause);
}
}
pom.xml
<!-- https://mvnrepository.com/artifact/org.apache.camel/camel-barcode -->
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-barcode</artifactId>
<version>2.21.1</version>
</dependency>
错误
附上图片
有人可以告诉我有什么解决方法吗?提前致谢
Could some one let me know is there any workaround for this? Thanks in advance
推荐答案
我认为你应该学习 fundamentals-of-algorithms 和 Java 首先是 TRY_HARDER
并使用 GenericMultipleBarcodeReader
:)
I think you should learn fundamentals-of-algorithms and Java first then just TRY_HARDER
and use GenericMultipleBarcodeReader
:)
public class MbcPoc {
public static void main(String... args) throws NotFoundException, IOException {
List<BarcodeInfo> list = decodeImageWithMBC("fREyt.png");
list.forEach(BarcodeInfo::println);
}
private static List<BarcodeInfo> decodeImageWithMBC(String imgPath) throws NotFoundException, IOException {
BufferedImage img = ImageIO.read(new File(imgPath));
BinaryBitmap bb = new BinaryBitmap(new HybridBinarizer(new BufferedImageLuminanceSource(img)));
MultipleBarcodeReader mbReader = new GenericMultipleBarcodeReader(new MultiFormatReader());
Hashtable<DecodeHintType, Object> hints = new Hashtable<>();
hints.put(DecodeHintType.TRY_HARDER, Boolean.TRUE);
List<BarcodeInfo> list = new ArrayList<>();
for (Result result : mbReader.decodeMultiple(bb, hints)) {
list.add(new BarcodeInfo(result.getText(), result.getBarcodeFormat().name()));
}
return list;
}
public static class BarcodeInfo {
private final String text;
private final String format;
BarcodeInfo(String text, String format) {
this.text = text;
this.format = format;
}
public static void println(BarcodeInfo bci) {
System.out.println(bci.text + "/" + bci.format);
}
}
}
相关文章