如何使用 zxing 库从一张图像中读取多个二维码

Posted

技术标签:

【中文标题】如何使用 zxing 库从一张图像中读取多个二维码【英文标题】:How to read multiple qr codes from one image using zxing library 【发布时间】:2013-02-12 23:53:39 【问题描述】:

我目前正在开发一种扫描仪,可以读取一张图片中的多个二维码。 我设法读取图像中的二维码,但结果不一致。假设图像中有 4 个 QR 码,有时我可以读取 2 个,有时可以读取 3 个或仅 1 个。与原始扫描仪(ZXing Scanner)不同,它解码速度很快。而在我的情况下,我必须确保有足够的光线并且图像不会模糊以进行解码。

我正在使用QRCodeMultiReader 来解码图像。目前使用ZXingLibrary 来创建应用程序。

下面是我的代码的 sn-p:

public void onPictureTaken(byte[] data, Camera camera) 
   BitmapFactory.Options opt = new BitmapFactory.Options();
    opt.inMutable = true;
   Bitmap bitmap = BitmapFactory
            .decodeByteArray(data, 0, data.length, opt);
   Hashtable<DecodeHintType, Object> hints = new Hashtable<DecodeHintType, Object>();
   hints.put(DecodeHintType.TRY_HARDER, Boolean.TRUE);
   LuminanceSource source = new RGBLuminanceSource(bitmap);

   QRCodeMultiReader multiReader = new QRCodeMultiReader();
   Result[] results = multiReader.decodeMultiple(new BinaryBitmap(
   new HybridBinarizer(source)), hints);

【问题讨论】:

你有没有找到完美的解决方案来读取多个条码?/ 很遗憾我没有这样做,因为我们停止了该功能的开发。但将继续为此寻找解决方案,尤其是我回到 android 中。 好的,你能分享一下你之前尝试过的代码吗? 我刚刚使用了 zxing 库并设置了我的相机代码。我只是按照android教程在主要活动中设置相机视图。我现在没有工作代码的副本,因为我不再与要求我执行该功能的客户建立联系。我不保留代码,因为它已经归客户所有。 @SheSmileGM 请帮助我,我正在寻找同样的东西。但在我的情况下,只有一个二维码读取是好的,因为所有代码都是相同的。请尝试在这里给我答案:***.com/questions/30767188/… 【参考方案1】:

我已经为相机创建了一个应用程序,我使用了intent,因为每个 Andriod 操作系统都有默认的相机应用程序,通常它们比编写一个仅针对您的手机优化的通用相机应用程序更适合该设备...所以为了相机更好地使用intent

为了从单个图像中提取多个 QR,我尝试了以下代码。 但是结果不一致有时我得到 1 或 2 或 3 出 4 有时没有....它不是完美的解决方案

if(photo == null) 
        return;
    Bitmap ScaledQr = null;
    ScaledQr = Bitmap.createScaledBitmap(photo, 640,480, false);
    BinaryBitmap Qr = BitMap2BinayBitmap(ScaledQr);
    Result [] kpResultMulti = null;
    Result kpResultSingle = null;
    Hashtable<DecodeHintType, Object> hints = new Hashtable<DecodeHintType, Object>();
    hints.put(DecodeHintType.TRY_HARDER, true);
    //hints.put(DecodeHintType.PURE_BARCODE, true);

    try 
        kpResultMulti = kpReaderArr.decodeMultiple(Qr,hints);
     catch (NotFoundException e) 
        // TODO Auto-generated catch block
        msbox("Exception","NotFoundException");
        e.printStackTrace();
    

    if(kpResultMulti != null)
        msbox("Total Result" ,kpResultMulti.length +"");// + photo.getWidth() +     "Height=" + photo.getHeight());
        for(Result kp : kpResultMulti)
        

            msbox("Results",kp.getText());
        
    

【讨论】:

【参考方案2】:

您好,请检查 Zxing Barcode Scanner 应用程序,它在设置中具有扫描批量条形码的选项,因此您启用它并检查它您可以从一个或多个图像一次读取多个 QR 码,并检查 Zxing 的源代码库到已知的详细信息。

https://code.google.com/p/zxing/

【讨论】:

没有注意到我可以更改设置以在 zxing 扫描仪中扫描多个代码,谢谢。将再次调试zxing扫描仪源代码。 批量扫描与一次读取多个条码无关,而是连续读取多个条码。应用中没有同时扫描多个条码的选项,但库中有。 @SeanOwen 是的,应用程序中唯一的选项是连续读取多个条码,但不是一次读取。但是在库中,结果并不一致,关于如何从相机中获取图像的任何建议,我使用camera.takePicture(null,null,mPicture) 来获取它。调试 zxing 库有点挑战性,我注意到有一个 resultpointcallbacks,我不确定它是如何工作的或如何获取它或它的用途。

以上是关于如何使用 zxing 库从一张图像中读取多个二维码的主要内容,如果未能解决你的问题,请参考以下文章

用java程序如何读取图书条形码

zxing二维码生成工具类

java zxing实现二维码生成和解析zxing实现二维码生成和解析

Android 基于google Zxing实现二维码条形码扫描,仿微信二维码扫描效果

在WPF中开启摄像头扫描二维码(Media+Zxing)

Java通过Zxing生成二维码