从UIImage中删除颜色

时间:2017-07-16 15:07:41

标签: ios swift uiimage

我有一张图片:

enter image description here

您可以清楚地看到,条形码与UI非常吻合:/

我认为这可能是一个潜在的解决方法,就是将“绿色屏幕”移出图像中的黑色,留在条形码的白色部分。

条形码本身即时生成。

func generateBarcode(from string: String) -> UIImage? {
        let data = string.data(using: String.Encoding.ascii)

        if let filter = CIFilter(name: "CICode128BarcodeGenerator") {
            filter.setValue(data, forKey: "inputMessage")

            let transform = CGAffineTransform(scaleX: 3, y: 3)

            if let output = filter.outputImage?.applying(transform) {
                let invertFiler = CIFilter(name: "CIColorInvert")!
                invertFiler.setValue(output, forKey: kCIInputImageKey)

                return UIImage(ciImage: (invertFiler.outputImage?.applying(transform))!) //TODO: Remove force unwrap
            }
        }
        return nil
    }

现在我听说我可以使用“CIColorCube”过滤器,但却无法使用它。

是否可以移除黑色部分?如果是这样,你能帮助我吗?

由于

1 个答案:

答案 0 :(得分:0)

有一个过滤器(CIMaskToAlpha)用于拍摄灰色图像并使用灰度级作为alpha值。对于黑白图像,这使得黑色透明和白色不透明白色,我认为这是你想要的。

func generateBarcode(from string: String) -> UIImage? {
    let data = string.data(using: String.Encoding.ascii)

    if let filter = CIFilter(name: "CICode128BarcodeGenerator") {
        filter.setValue(data, forKey: "inputMessage")

        let transform = CGAffineTransform(scaleX: 3, y: 3)

        if let outputBarcode = filter.outputImage?.applying(transform) {
            let invertFilter = CIFilter(name: "CIColorInvert")!
            invertFilter.setValue(outputBarcode, forKey: kCIInputImageKey)

            if let outputInvert = invertFilter.outputImage?.applying(transform) {
                let mask = CIFilter(name: "CIMaskToAlpha")!
                mask.setValue(outputInvert, forKey: kCIInputImageKey)

                return UIImage(ciImage: (mask.outputImage?.applying(transform))!) //TODO: Remove force unwrap
            }
        }
    }
    return nil
}

如果将生成的图像放在蓝色的背景上,您将只看到白条。

PS:当你说"绿屏"时,你的意思是(在成像语言中)是像素是透明的。这由颜色的α分量(R,G,B,A)表示。此滤镜将每个像素设置为白色,但使用原始颜色设置alpha。白色(1.0)是完全不透明的alpha,黑色(0.0)是完全透明的。如果你有其他灰度级,那些像素将是半透明白色。