Sending an on-the-fly created QR Code UIImage by AirDrop fails

我只是一个虾纸丫 提交于 2019-12-03 16:12:55
Barzille

It seems I need to provide the image in a slightly different way, so altering the QR code generation this way solves the problem by creating a CGImage before creating the UIImage:

func generateQRCode(from string: String) -> UIImage? {
    let ciContext = CIContext()
    let data = string.data(using: String.Encoding.ascii)

    if let filter = CIFilter(name: "CIQRCodeGenerator") {
        filter.setValue(data, forKey: "inputMessage")
        let transform = CGAffineTransform(scaleX: 3, y: 3)
        let upScaledImage = filter.outputImage?.applying(transform)


        let cgImage = ciContext.createCGImage(upScaledImage!,
                                              from: upScaledImage!.extent)
        let qrcodeImage = UIImage(cgImage: cgImage!)
        return qrcodeImage
    }
    return nil
}

For Swift 4.2

func generateQRCode(from string: String) -> UIImage? {
    let ciContext = CIContext()
    let data = string.data(using: String.Encoding.ascii)

    if let filter = CIFilter(name: "CIQRCodeGenerator") {
        filter.setValue(data, forKey: "inputMessage")
        let transform = CGAffineTransform(scaleX: 3, y: 3)
        let upScaledImage = filter.outputImage?.transformed(by: transform)

        let cgImage = ciContext.createCGImage(upScaledImage!, from: upScaledImage!.extent)
        let qrcodeImage = UIImage(cgImage: cgImage!)
        return qrcodeImage
    }
    return nil
}

And additionally you should use a png or jpg representation of the image:

func share() {
    let png = UIImagePNGRepresentation(qrcodeImage)
    let vc = UIActivityViewController(activityItems: [png!], applicationActivities: [])
    present(vc, animated: true)
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!