斯威夫特 :使用 AVFoundation 框架从照片库中扫描 QR



我想扫描从照片库中获取的二维码。这个链接有类似的东西,但没有多大帮助。 我已经成功地使用相机实现了扫描二维码功能。下面是这个代码:

func captureOutput(_ captureOutput: AVCaptureOutput!, didOutputMetadataObjects metadataObjects: [Any]!, from connection: AVCaptureConnection!)
{
// Check if the metadataObjects array is not nil and it contains at least one object.
if metadataObjects == nil || metadataObjects.count == 0 {
qrCodeFrameView?.frame = CGRect.zero
//            lblMesage.text = QRCaptureFailedMessage
return
}
// Get the metadata object.
metadataObj = metadataObjects[0] as? AVMetadataMachineReadableCodeObject
// Here we use filter method to check if the type of metadataObj is supported
// Instead of hardcoding the AVMetadataObjectTypeQRCode, we check if the type
// can be found in the array of supported bar codes.
if supportedBarCodes.contains(metadataObj!.type) {
//        if metadataObj.type == AVMetadataObjectTypeQRCode {
// If the found metadata is equal to the QR code metadata then update the status label's text and set the bounds
let barCodeObject = videoPreviewLayer?.transformedMetadataObject(for: metadataObj)
qrCodeFrameView?.frame = barCodeObject!.bounds
if metadataObj!.stringValue != nil {
. . .
}
}
}

func scanQRFromGallery(qrcodeImg : 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("qrCodeLink is empty")
}
else{
print("message: (qrCodeLink)")
}
}

任何帮助将不胜感激。

您可以使用此代码扫描图库照片中的代码。有关代码的其他信息:

import UIKit
import AVFoundation
class QRScanner: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate {
private func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
guard
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),
let features = detector.features(in: ciImage) as? [CIQRCodeFeature]
else {
print("Something went wrong")
return
}
var qrCodeLink = ""
features.forEach { feature in
if let messageString = feature.messageString {
qrCodeLink += messageString
}
}
if qrCodeLink.isEmpty {
print("qrCodeLink is empty!")
} else {
print("message: (qrCodeLink)")
}
self.dismiss(animated: true, completion: nil)
}
}

您可以阅读这篇文章: 从图库斯威夫特扫描二维码

最新更新