如何在iOS中使用UIImagePickerController从选取的图像中扫描QR码

4
我能够使用相机扫描二维码而不使用任何外部库,如ZBAR或ZXING。
现在我想要的是让用户从照片库上传一张图片,并从上传的图片中扫描二维码。
我知道如何使用UIImagePickerController(之前用过)。
我的问题是, 我如何从上传的图片中扫描二维码(不使用相机)?
您可以建议一些代码(.h / .m文件),我可以将其添加到我的项目中。
请不要向我推荐任何外部库,如ZBAR或ZXING。

只是为了澄清一下。您想让用户将QR图像加载到您的应用程序中,然后通过编程方式读取它吗? - AJ9
我希望用户能够上传一张图片,然后通过编程读取并显示结果。 - Ashish
3个回答

7

我知道你可能已经找到了解决方案,但我回复这篇帖子是为了如果我的答案能够帮助其他人解决相关问题。

在这里,我发布了我的代码,可以从图库选择的图像中扫描QR码,而不使用任何库。

func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) {



    if let pickedImage = info[UIImagePickerControllerEditedImage] as? UIImage {
                 let detector:CIDetector=CIDetector(ofType: CIDetectorTypeQRCode, context: nil, options: [CIDetectorAccuracy:CIDetectorAccuracyHigh])

    let ciImage:CIImage = CIImage(image:pickedImage)!

    var qrCodeLink = ""

    let features=detector.featuresInImage(ciImage)

    for feature in features as! [CIQRCodeFeature] {

        qrCodeLink += feature.messageString
    }

    print(qrCodeLink)//Your result from QR Code
}

    dismissViewControllerAnimated(true, completion: nil)
}

3

根据@Dev_Tandel的回复,已更新为Swift 5,并采用更“Swifty”的方式。
但对我而言,.originalImage 起作用,而不是 .editedImage

func imagePickerController(_ picker: UIImagePickerController,
                           didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {

    guard let pickedImage = info[UIImagePickerController.InfoKey.originalImage] as? UIImage,
        let detector = CIDetector(ofType: CIDetectorTypeQRCode,
                                  context: nil,
                                  options: [CIDetectorAccuracy: CIDetectorAccuracyHigh]),
        let ciImage = CIImage(image: pickedImage),
        let features = detector.features(in: ciImage) as? [CIQRCodeFeature] else { return }

    let qrCodeLink = features.reduce("") { $0 + ($1.messageString ?? "") }

    print(qrCodeLink)//Your result from QR Code
}

-3
在苹果的iOS中,没有原生地包含QR码阅读器。因此,苹果没有提供可用的API。
你必须依赖第三方SDK或编写自己的代码。

2
从iOS 7开始,苹果提供了一个QR码扫描器,但它只能使用相机进行扫描。它无法扫描图像。 - rmaddy
看看ZXing和ZBar。 - zaph

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接