【问题标题】:How to remove the gray Frame from QR code generator如何从 QR 码生成器中删除灰色框架
【发布时间】:2019-06-01 11:59:50
【问题描述】:

我创建了一个具有不同颜色的 QRCode 生成器我想删除 Frame 中的灰色,并且在我使用这个灰色的过滤器后实际上只有一种白色或清晰的颜色 产生一些时间

let data = string.data(using: .isoLatin1, allowLossyConversion: false)
        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(color: UIColor.clear), forKey: "inputColor1")
            colorFilter.setValue(CIColor(color: UIColor.black), forKey: "inputColor0")

 guard let qrCodeImage = colorFilter.outputImage
                else {
                    return nil
            }
            let scaleX = imageView.frame.size.width / qrCodeImage.extent.size.width
            let scaleY = imageView.frame.size.height / qrCodeImage.extent.size.height
            let transform = CGAffineTransform(scaleX: scaleX, y: scaleY)


            if let output = colorFilter.outputImage?.transformed(by: transform) {



                let image = convert(cmage:(output.transformed(by: CGAffineTransform(scaleX: scaleX, y: scaleY))))
                return image

  }
        }
        return nil
}

func convert(cmage:CIImage) -> UIImage
    {
        let context:CIContext = CIContext.init(options: nil)
        let cgImage:CGImage = context.createCGImage(cmage, from: cmage.extent)!
        let image:UIImage = UIImage.init(cgImage: cgImage)
        return image
    }

如果我不使用过滤器更改颜色,我没有这个问题 或者如果我使用蓝色,我有一个水蓝色框架

【问题讨论】:

  • 为什么在生成二维码后需要使用过滤器CIFalseColor?你想达到什么目的?我会简单地删除 CIFalseColor 并对二维码过滤器生成的二维码图像应用简单的比例变换。
  • 顺便说一句 CIQRCodeGenerator 工作代码示例在这里stackoverflow.com/a/51181064/2303865
  • @LeoDabus 我想将颜色更改为蓝色二维码或红色等...但在所有二维码框架中,我在框架中收到相同的问题
  • @LeoDabus 我要更改二维码颜色
  • 我没看懂你的问题,你的图片是白色的,已经有灰色阴影了

标签: ios swift uiimage qr-code cifilter


【解决方案1】:

使用我发布的链接中的扩展作为起点:

extension String {
    func qrCode(background: UIColor = .white, color: UIColor = .black, output: CGSize = CGSize(width: 250, height: 250))-> UIImage? {
        guard
            let data = data(using: .isoLatin1),
            let filter = CIFilter(name: "CIQRCodeGenerator")
            else { return nil }
        filter.setValue(data, forKey: "inputMessage")
        filter.setValue("M", forKey: "inputCorrectionLevel")
        guard let image = filter.outputImage
            else { return nil }
        let size = image.extent.integral
        let matrix = CGAffineTransform(scaleX: output.width / size.width, y: output.height / size.height)
        UIGraphicsBeginImageContextWithOptions(output, false, 0)
        defer { UIGraphicsEndImageContext() }
        guard
            let colorFilter = CIFilter(name: "CIFalseColor",
                                   parameters: ["inputImage" : image.transformed(by: matrix),
                                                "inputColor1": CIColor(color: background) ,
                                                "inputColor0": CIColor(color: color)]),
            let coloredImage = colorFilter.outputImage
        else { return nil }
        UIGraphicsBeginImageContextWithOptions(output, false, 0)
        defer { UIGraphicsEndImageContext() }
        UIImage(ciImage: coloredImage).draw(in: CGRect(origin: .zero, size: output))
        return UIGraphicsGetImageFromCurrentImageContext()
    }
}


let link = "https://stackoverflow.com/questions/51178573/swift-image-data-from-ciimage-qr-code-how-to-render-cifilter-output?noredirect=1"
if let coloredQRCode = link.qrCode(color: .red, output: CGSize(width: 500, height: 500)) {
    coloredQRCode
}

【讨论】:

    猜你喜欢
    • 2017-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-20
    • 2021-12-29
    • 2014-05-27
    • 2023-03-11
    • 1970-01-01
    相关资源
    最近更新 更多