无法从图库图像中扫描二维码
Unable to Scan QR from gallery image
我正在尝试制作一个 QR 码扫描仪,它会在单击按钮时从图库中获取图像并显示一条消息。
我的按钮功能是:-
@IBAction func gallaryBtnEventListener(_ sender: Any) {
if UIImagePickerController.isSourceTypeAvailable(UIImagePickerController.SourceType.photoLibrary) {
pickerController.delegate = self
pickerController.sourceType = UIImagePickerController.SourceType.photoLibrary
pickerController.allowsEditing = true
self.present(pickerController, animated: true, completion: nil)
}
}
这是 imagepickerCONtroller
private func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
if let qrcodeImg = info[UIImagePickerController.InfoKey.originalImage.rawValue] as? UIImage {
let detector:CIDetector=CIDetector(ofType: CIDetectorTypeQRCode, context: nil, options: [CIDetectorAccuracy:CIDetectorAccuracyHigh])!
let ciImage:CIImage=CIImage(image:qrcodeImg)!
var qrCodeLink=""
let features=detector.features(in: ciImage)
for feature in features as! [CIQRCodeFeature] {
qrCodeLink += feature.messageString!
}
if qrCodeLink=="" {
print("nothing")
}else{
print("message: \(qrCodeLink)")
}
}
else{
print("Something went wrong")
}
self.dismiss(animated: true, completion: nil)
}
当我 运行 这段代码时,我成功地 select 了图库中的一张图片,但它什么也没打印。
现在我需要这方面的帮助。还有一点,我没有添加任何imageView。
这是因为您要为 UIImagePickerControllerDelegate
方法 imagePickerController(_:,didFinishPickingMediaWithInfo:)
添加 private
访问修饰符。删除方法前面的 private
关键字,委托将开始正常工作。另外,不要 copy/paste 使用旧版本的委托方法,这里是新版本:
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
if let qrcodeImg = info[.originalImage] as? UIImage {
//...
}
}
我正在尝试制作一个 QR 码扫描仪,它会在单击按钮时从图库中获取图像并显示一条消息。
我的按钮功能是:-
@IBAction func gallaryBtnEventListener(_ sender: Any) {
if UIImagePickerController.isSourceTypeAvailable(UIImagePickerController.SourceType.photoLibrary) {
pickerController.delegate = self
pickerController.sourceType = UIImagePickerController.SourceType.photoLibrary
pickerController.allowsEditing = true
self.present(pickerController, animated: true, completion: nil)
}
}
这是 imagepickerCONtroller
private func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
if let qrcodeImg = info[UIImagePickerController.InfoKey.originalImage.rawValue] as? UIImage {
let detector:CIDetector=CIDetector(ofType: CIDetectorTypeQRCode, context: nil, options: [CIDetectorAccuracy:CIDetectorAccuracyHigh])!
let ciImage:CIImage=CIImage(image:qrcodeImg)!
var qrCodeLink=""
let features=detector.features(in: ciImage)
for feature in features as! [CIQRCodeFeature] {
qrCodeLink += feature.messageString!
}
if qrCodeLink=="" {
print("nothing")
}else{
print("message: \(qrCodeLink)")
}
}
else{
print("Something went wrong")
}
self.dismiss(animated: true, completion: nil)
}
当我 运行 这段代码时,我成功地 select 了图库中的一张图片,但它什么也没打印。 现在我需要这方面的帮助。还有一点,我没有添加任何imageView。
这是因为您要为 UIImagePickerControllerDelegate
方法 imagePickerController(_:,didFinishPickingMediaWithInfo:)
添加 private
访问修饰符。删除方法前面的 private
关键字,委托将开始正常工作。另外,不要 copy/paste 使用旧版本的委托方法,这里是新版本:
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
if let qrcodeImg = info[.originalImage] as? UIImage {
//...
}
}