如何扫描iOS中UIImagePickerController选取的图像中的Qr代码

时间:2014-07-19 19:19:35

标签: ios qr-code

我可以使用相机扫描qr代码,而无需使用任何外部库,如ZBAR或ZXING。

现在我真正想要的是让用户从照片库上传图像并从上传的图像中扫描二维码。

我知道如何使用UIImagePickerController(之前使用过它)。

我想问的是, 如何从上传的图像扫描qr代码(不使用相机)

您可以建议我可以在项目中添加的一些代码(.h / .m文件)。

请不要向我推荐任何外部库,如ZBAR或ZXING。

3 个答案:

答案 0 :(得分:6)

我知道你可能已经为此找到了解决方案,但如果我的回答可能有助于其他相关问题,我会回复帖子。

这里我将代码发布到ScanQRCode,而不是使用任何库,而是从图库中选取的图像。

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)
}

答案 1 :(得分:0)

已更新为基于@Dev_Tandel响应的快速5和更多“快速”方式。
但是对我来说,.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
}

答案 2 :(得分:-2)

在Apple的iOS中,QR码阅读器本身不包含。因此,您可以使用Apple的API。

您必须依赖任一或第三方SDK或编写自己的代码。