Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 不从静态图像中检测二维码_Ios - Fatal编程技术网

Ios 不从静态图像中检测二维码

Ios 不从静态图像中检测二维码,ios,Ios,我想从静止图像中检测QR码 这是密码 let ciimage = <Load image from asset and covert to CIImage> let detector = CIDetector(ofType: CIDetectorTypeQRCode, context:nil, options:nil) let features = detector.featuresInImage(ciimage) print(features.count) let ciimag

我想从静止图像中检测QR码 这是密码

let ciimage =  <Load image from asset and covert to CIImage>
let detector = CIDetector(ofType: CIDetectorTypeQRCode, context:nil, options:nil)
let features = detector.featuresInImage(ciimage)
print(features.count)
let ciimage=
let detector=CIDetector(类型:CIDetectorTypeQRCode,上下文:nil,选项:nil)
let features=检测器。featuresInImage(ciimage)
打印(功能。计数)
图像是正确的CIImage实例,它有QRCode,但我总是没有功能,有人有相同的问题吗

非常感谢。

我想我找到了答案

  • 该代码只在操场真正的iPhone中起作用,在模拟器上它永远不起作用

  • 我使用CIQRCodeGeneratorCoreImage过滤器生成了QRCode图像

我希望有人能在这里检查我的答案并给我建议

下面是我使用的源代码

enum QRCodeUtilError:ErrorType{
    case GenerationFailed
}

extension UIImage {
    /**
     This function trys to return CIImage even the image is CGImageRef based.
     - Returns: CIImage equal to current image
    */
    func ciImage() -> CoreImage.CIImage?{
        // if CIImage is not nil then return it
        if self.CIImage != nil {
            return self.CIImage
        }

        guard let cgImage = self.CGImage else {
            return nil
        }
        return CoreImage.CIImage(CGImage: cgImage)
    }
}

/**
QRCode utility class
*/
class QRCodeUtil{
    /**
     Generates 'H' mode qrcode image
     - Parameter qrCode: QRCode String
     - Returns: Optional UIImage instance of QRCode
     */
    class func imageForQrCode(qrCode:String) throws -> UIImage{
        guard let filter = CIFilter(name: "CIQRCodeGenerator") else {
            throw QRCodeUtilError.GenerationFailed
        }
        guard let data = qrCode.dataUsingEncoding(NSISOLatin1StringEncoding) else {
            throw QRCodeUtilError.GenerationFailed
        }
        filter.setValue(data, forKey: "inputMessage")
        filter.setValue("H", forKey: "inputCorrectionLevel")

        guard let outputImage = filter.outputImage else {
            throw QRCodeUtilError.GenerationFailed
        }

        /* 
    Convert the image to CGImage based because
    it crashes when saving image using
    UIImagePNGRepresentation or UIImageJPEGRepresentation
    if image is CIImage based. 
    */
        let context = CIContext(options: nil)
        let cgImage = context.createCGImage(outputImage, fromRect: outputImage.extent)
        return UIImage(CGImage: cgImage)
    }

    /**
     Detects QRCode from string
     - Parameter qrImage: UIImage which has QRCode
     - Returns: QRCode detected
    */
    class func qrCodeFromImage(qrImage:UIImage) -> String {
        let detector = CIDetector(ofType: CIDetectorTypeQRCode, context: nil, options: [CIDetectorAccuracy:CIDetectorAccuracyHigh])
        guard let ciImage = qrImage.ciImage() else {
            return ""
        }
        guard let feature = detector.featuresInImage(ciImage).last as? CIQRCodeFeature else {
            return ""
        }
        return feature.messageString
    }
}

我发现了类似的问题。如果图像有透明背景,则无法扫描