【发布时间】:2016-02-14 10:43:26
【问题描述】:
我试图让我的应用程序的用户能够从他们的库中获取图像并从中扫描 QRCode。以下是相关代码:
这是从带有所选图像的图像选择器返回的函数。
func imagePickerController(picker: UIImagePickerController, didFinishPickingImage image: UIImage, editingInfo: [String : AnyObject]?) {
let thisImage:CIImage? = CIImage(image: image)
let code = performQRCodeDetection(thisImage!)
self.dismissViewControllerAnimated(true, completion: nil)
self.performSegueWithIdentifier("goBackSegue", sender: code)
}
在那个函数里面我调用这个函数来进行二维码扫描:
func performQRCodeDetection(image: CIImage) -> String {
var decode = ""
let options = [CIDetectorAccuracy: CIDetectorAccuracyHigh]
let detector = CIDetector(ofType: CIDetectorTypeQRCode, context: nil, options: options)
let features = detector.featuresInImage(image)
for feature in features as! [CIQRCodeFeature] {
decode = feature.messageString
}
return decode
}
可变特征总是返回为空。图像中肯定有一个 QRCode。我从所有方向和大小拍摄了图像。我无法得到任何结果。
有什么想法吗?
谢谢!
【问题讨论】:
-
您是否在二维码图像上尝试过您的代码(例如en.wikipedia.org/wiki/File:Wikipedia_mobile_en.svg)?您是否在 iOS 8 及更高版本上运行(否则不支持?最后,我试图找到一个上下文不是 nil 但我找不到的示例。奇怪。
-
另外,不要在模拟器中尝试这个。显然,它并不总是有效。 (stackoverflow.com/a/30230136/5276890, forums.developer.apple.com/thread/20887)
-
感谢您的回答!是的,我正在运行 IOS 8.4 的 iPhone 6+ 上进行测试。我尝试了使用二维码拍摄的图像,但我刚刚下载了您链接的图像,但仍然没有得到任何结果。
-
所以取得了一些进展。我在手机上截取了那个 Wiki QRCode 的屏幕截图,屏幕截图成功了。它找到了二维码并正确读取。无论我如何尝试制作它,它仍然无法在其他照片上找到它......我什至在一些光线充足的白纸上打印了一个简单的二维码,并且只在图片中得到了那个代码。只能让那一个图像工作。我尝试将精度更改为低...没有改变任何东西。
-
另外,请注意,可能只支持 ISO18004 (developer.apple.com/library/prerelease/ios/documentation/…),还有其他格式。
标签: ios swift core-image