ios - 为什么 iOS Core 图像二维码生成器无法工作?

标签 ios swift core-image

我正在尝试使用 iOS Core Image API 生成 QR 码:

func createQRForString(#data : NSData)->CIImage!{
    var qrFilter = CIFilter(name: "CIQRCodeGenerator")
    qrFilter.setValue(data, forKey: "inputMessage")
    qrFilter.setValue("H", forKey:"inputCorrectionLevel")
    return qrFilter.outputImage
}



func createNonInterpolatedImageFromCIImage(image : CIImage,withScale scale:CGFloat)->UIImage{
    let cgImage = CIContext(options: nil).createCGImage(image, fromRect: image.extent())
    UIGraphicsBeginImageContext(CGSizeMake(image.extent().size.width*scale, image.extent().size.height*scale))
    let context = UIGraphicsGetCurrentContext()
    CGContextSetInterpolationQuality(context, kCGInterpolationNone)
    let scaledImage = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()
    return scaledImage
}

在 viewDidLoad 方法中添加以下代码:

let data = "Hello World".dataUsingEncoding(NSUTF8StringEncoding)

    if let image=createQRForString(data: data!){
            let uiimage = createNonInterpolatedImageFromCIImage(image, withScale: 1.0)
            imageView.image = uiimage
    }
    else{
        println("Error loading image")
    }

}

但它既不打印“Error”,也不在 imageView 中显示二维码。

最佳答案

解决方案如下:

override func viewDidLoad() {
    super.viewDidLoad()
    self.imgView.image = generateCode()
}

func generateCode() -> UIImage {
    let filter = CIFilter(name: "CIQRCodeGenerator")

    let data = "Hello World".dataUsingEncoding(NSUTF8StringEncoding)
    filter.setValue("H", forKey:"inputCorrectionLevel")
    filter.setValue(data, forKey:"inputMessage")

    let outputImage = filter.outputImage
    let context = CIContext(options:nil)
    let cgImage = context.createCGImage(outputImage, fromRect:outputImage.extent())

    let image = UIImage(CGImage:cgImage, scale:1.0, orientation:UIImageOrientation.Up)
    let resized = resizeImage(image!, withQuality:kCGInterpolationNone, rate:5.0)
    return resized
}

func resizeImage(image: UIImage, withQuality quality: CGInterpolationQuality, rate: CGFloat) -> UIImage {
    let width = image.size.width * rate
    let height = image.size.height * rate

    UIGraphicsBeginImageContextWithOptions(CGSizeMake(width, height), true, 0)
    let context = UIGraphicsGetCurrentContext()
    CGContextSetInterpolationQuality(context, quality)
    image.drawInRect(CGRectMake(0, 0, width, height))

    let resized = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();        
    return resized;
}

关于ios - 为什么 iOS Core 图像二维码生成器无法工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29890351/

相关文章:

android - Phonegap/Cordova 中的 "Review this App"链接

ios - 在 UIViewController 之间传递 UILongPressGestureRecognizer

ios - 我有一个没有背景的 png 文件,如何在 iOS 中为该图像创建清晰的彩色背景?

ios - 在 objective-c 中创建 CLLocation 对象

ios - 如何让我的 bundle 显示名称在“设置”中和我的图标下显示不同? (X代码)

swift - iOS/swift : How to add one extension to multiple controllers?

swift - NSDateComponents 语法的差异?

cocoa - CoreImage - 在 CPU 上运行过滤器

iOS,人脸检测,检测远离人脸的位置

ios - ul > li :hover . 子菜单 { 显示 : block; } - To get working on iPad?