CIFilter 中的 CIQRCodeGenerator 问题
Issue with CIQRCodeGenerator in CIFilter
我正在更新现有的应用程序以支持 iOS 12,但 CIFilter
出现了奇怪的问题。
这很简单 class 只有一个功能 generate()
:
class QRGenerator {
static func generate(from string: String) -> UIImage? {
let context = CIContext()
let data = string.data(using: String.Encoding.ascii)
if let filter = CIFilter(name: "CIQRCodeGenerator") {
filter.setValue(data, forKey: "inputMessage")
let transform = CGAffineTransform(scaleX: 7, y: 7)
if let output = filter.outputImage?.transformed(by: transform), let cgImage = context.createCGImage(output, from: output.extent) {
return UIImage(cgImage: cgImage)
}
}
return nil
}
}
这个 class 在 iOS 12 之前完美运行。现在在行 if let filter = CIFilter(name: "CIQRCodeGenerator")
我总是收到零。
我花了一些时间查看 Apple 文档,但没有找到有关此问题的任何有用信息。
我对 CIFilters
知之甚少,但也许您可以尝试获取所有可能的过滤器名称:
let allFiltersNames = CIFilter.filterNames(inCategories: nil)
我找不到与 CIQRCodeGenerator
匹配的过滤器,但可能有其他名称不同的过滤器可以满足您的需要。
我也遇到过,我也试过用像QRcode这样的外部库生成二维码https://github.com/aschuch/QRCode但是二维码的图像总是零。
当我使用 iOS 12.0 (16A5308d) 从 Xcode 10.0 beta 2.
在模拟器中安装应用程序时,它是零
但是当我将它安装在物理设备 iPhone SE 中时,iOS 12 beta 4 (16A5339e) 来自相同的 Xcode (10.0 beta 2),生成了二维码完全没问题。
我还尝试使用来自同一个 Xcode (10.0 beta 2) 的 iPhone SE 和 iOS 11.4 (15F79) 并完美运行。
在Swift5
class QRGenerator {
static func generate(from string: String) -> UIImage? {
let data = string.data(using: .ascii, allowLossyConversion: false)
let filter = CIFilter(name: "CIQRCodeGenerator")
filter?.setValue(data, forKey: "inputMessage")
return UIImage(ciImage: (filter?.outputImage)!)
}
}
调用这个函数
myImageView.image = QRGenerator.generate(from: "Whosebug")
我正在更新现有的应用程序以支持 iOS 12,但 CIFilter
出现了奇怪的问题。
这很简单 class 只有一个功能 generate()
:
class QRGenerator {
static func generate(from string: String) -> UIImage? {
let context = CIContext()
let data = string.data(using: String.Encoding.ascii)
if let filter = CIFilter(name: "CIQRCodeGenerator") {
filter.setValue(data, forKey: "inputMessage")
let transform = CGAffineTransform(scaleX: 7, y: 7)
if let output = filter.outputImage?.transformed(by: transform), let cgImage = context.createCGImage(output, from: output.extent) {
return UIImage(cgImage: cgImage)
}
}
return nil
}
}
这个 class 在 iOS 12 之前完美运行。现在在行 if let filter = CIFilter(name: "CIQRCodeGenerator")
我总是收到零。
我花了一些时间查看 Apple 文档,但没有找到有关此问题的任何有用信息。
我对 CIFilters
知之甚少,但也许您可以尝试获取所有可能的过滤器名称:
let allFiltersNames = CIFilter.filterNames(inCategories: nil)
我找不到与 CIQRCodeGenerator
匹配的过滤器,但可能有其他名称不同的过滤器可以满足您的需要。
我也遇到过,我也试过用像QRcode这样的外部库生成二维码https://github.com/aschuch/QRCode但是二维码的图像总是零。
当我使用 iOS 12.0 (16A5308d) 从 Xcode 10.0 beta 2.
在模拟器中安装应用程序时,它是零但是当我将它安装在物理设备 iPhone SE 中时,iOS 12 beta 4 (16A5339e) 来自相同的 Xcode (10.0 beta 2),生成了二维码完全没问题。
我还尝试使用来自同一个 Xcode (10.0 beta 2) 的 iPhone SE 和 iOS 11.4 (15F79) 并完美运行。
在Swift5
class QRGenerator {
static func generate(from string: String) -> UIImage? {
let data = string.data(using: .ascii, allowLossyConversion: false)
let filter = CIFilter(name: "CIQRCodeGenerator")
filter?.setValue(data, forKey: "inputMessage")
return UIImage(ciImage: (filter?.outputImage)!)
}
}
调用这个函数
myImageView.image = QRGenerator.generate(from: "Whosebug")