Using zxing to read QRcode in Java
•
Java
Some questions about using zxing
I write the following code to read the barcode from the image:
public class BarCodeDecode { /** * @param args */ public static void main(String[] args) { try { String tmpImgFile = "D:\\FormCode128.TIF"; 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.PURE_BARCODE,Boolean.FALSE); File tmpFile = new File(tmpImgFile); String tmpRetString = BarCodeUtil.decode(tmpFile,tmpHintsMap); //String tmpRetString = BarCodeUtil.decode(tmpFile,null); System.out.println(tmpRetString); } catch (Exception tmpExpt) { System.out.println("main: " + "Excpt err! (" + tmpExpt.getMessage() + ")"); } System.out.println("main: " + "Program end."); } } public class BarCodeUtil { private static BarcodeFormat DEFAULT_BARCODE_FORMAT = BarcodeFormat.CODE_128; /** * Decode method used to read image or barcode itself,and recognize the barcode,* get the encoded contents and returns it. * @param whatFile image that need to be read. * @param config configuration used when reading the barcode. * @return decoded results from barcode. */ public static String decode(File whatFile,Map<DecodeHintType,Object> whatHints) throws Exception { // check the required parameters if (whatFile == null || whatFile.getName().trim().isEmpty()) throw new IllegalArgumentException("File not found,or invalid file name."); BufferedImage tmpBfrImage; try { tmpBfrImage = ImageIO.read(whatFile); } catch (IOException tmpIoe) { throw new Exception(tmpIoe.getMessage()); } if (tmpBfrImage == null) throw new IllegalArgumentException("Could not decode image."); LuminanceSource tmpSource = new BufferedImageLuminanceSource(tmpBfrImage); BinaryBitmap tmpBitmap = new BinaryBitmap(new HybridBinarizer(tmpSource)); MultiFormatReader tmpBarcodeReader = new MultiFormatReader(); Result tmpResult; String tmpFinalResult; try { if (whatHints != null && ! whatHints.isEmpty()) tmpResult = tmpBarcodeReader.decode(tmpBitmap,whatHints); else tmpResult = tmpBarcodeReader.decode(tmpBitmap); // setting results. tmpFinalResult = String.valueOf(tmpResult.getText()); } catch (Exception tmpExcpt) { throw new Exception("BarCodeUtil.decode Excpt err - " + tmpExcpt.toString() + " - " + tmpExcpt.getMessage()); } return tmpFinalResult; } }
I try to read the following two images containing code128 and QRcode
It can be applied to code128, but not to QRcode Anyone knows why
Solution
I'm curious that your code is useful to me, but I have to delete the following prompt
tmpHintsMap. put(DecodeHintType.PURE_BARCODE,Boolean.FALSE);
When my image is not a pure bar code, this prompt breaks my result
thank you!
The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
二维码