ios - 如何更改二维码的颜色

标签 ios swift qr-code

我正在开发一个应包含带信息的二维码的应用程序,我知道该怎么做,但我必须将二维码的颜色从黑色设置为红色,据我所知这应该很容易,但我找不到一个好的答案来实现这一点,我会让我的代码和我的 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
    }
}

QRCODE

最佳答案

将您的代码更改为类似这样的内容。

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)
        }

enter image description here

关于ios - 如何更改二维码的颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42281398/

相关文章:

ios - 以编程方式自定义 View 中的 swift tableView - 丢失对 Controller 委托(delegate)和数据源的引用

React-native-camera 限制条码扫描区域

javascript - 在 tableViewRow 中交换图像

iphone - UIAlertView 的私有(private)方法崩溃

ios - 带有 XIB 的 CustomView - 初始化编码器方法中的无限循环

react-native - 允许我扫描 QRCode 的软件包?

qr-code - 一个二维码可以处理多少个纯文本字符?

ios - iOS : A server with the specified hostname could not be found 上的 AWS 转录错误

ios - 弹出到 Root View 时恢复倒计时

layout - 如何全屏显示网页 View (自动调整)