我正在开发一个应包含带信息的二维码的应用程序,我知道该怎么做,但我必须将二维码的颜色从黑色设置为红色,据我所知这应该很容易,但我找不到一个好的答案来实现这一点,我会让我的代码和我的 QrCode 屏幕,谢谢。
import UIKit
class QRCodeViewController: UIViewController {
@IBOutlet weak var imgQRCode: UIImageView!
func generateQRCode(from string: String) -> UIImage? {
let data = string.data(using: String.Encoding.utf8)
if let filter = CIFilter(name: "CIQRCodeGenerator") {
filter.setValue(data, forKey: "inputMessage")
filter.setValue("H", forKey: "inputCorrectionLevel")
guard let qrCodeImage = filter.outputImage
else {
return nil
}
let scaleX = imgQRCode.frame.size.width / qrCodeImage.extent.size.width
let scaleY = imgQRCode.frame.size.height / qrCodeImage.extent.size.height
let transform = CGAffineTransform(scaleX: scaleX, y: scaleY)
if let output = filter.outputImage?.applying(transform) {
return UIImage(ciImage: output)
}
}
return nil
}
override func viewDidLoad() {
super.viewDidLoad()
let image = generateQRCode(from: "Este es el código generado")
imgQRCode.image = image
}
}
最佳答案
将您的代码更改为类似这样的内容。
func generateQRCode(from string: String) -> UIImage? {
let data = string.data(using: String.Encoding.utf8)
if let filter = CIFilter(name: "CIQRCodeGenerator") {
guard let colorFilter = CIFilter(name: "CIFalseColor") else { return nil }
filter.setValue(data, forKey: "inputMessage")
filter.setValue("H", forKey: "inputCorrectionLevel")
colorFilter.setValue(filter.outputImage, forKey: "inputImage")
colorFilter.setValue(CIColor(red: 1, green: 1, blue: 1), forKey: "inputColor1") // Background white
colorFilter.setValue(CIColor(red: 1, green: 0, blue: 0), forKey: "inputColor0") // Foreground or the barcode RED
guard let qrCodeImage = colorFilter.outputImage
else {
return nil
}
let scaleX = imgQRCode.frame.size.width / qrCodeImage.extent.size.width
let scaleY = imgQRCode.frame.size.height / qrCodeImage.extent.size.height
let transform = CGAffineTransform(scaleX: scaleX, y: scaleY)
if let output = colorFilter.outputImage?.applying(transform) {
return UIImage(ciImage: output)
}
}
return nil
}
更新 Swift 3/4 的需求
if let output = colorFilter.outputImage?.transformed(by: transform) {
return UIImage(ciImage: output)
}
关于ios - 如何更改二维码的颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42281398/