2017-07-16 91 views
1

删除颜色我有一个形象:从一个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”过滤器,但一直未能解决使用它。

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

由于

回答

0

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

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分量表示。此滤镜将每个像素设置为白色,但使用原始颜色设置Alpha。白色(1.0)是完全不透明的alpha,黑色(0.0)是完全透明的。如果你有其他的灰度级,这些像素将是半透明的白色。

+0

谢谢!这是非常接近我想要的,但我的结果如下:https://gyazo.com/b5ea60b2c517ffc633faa4e218a5222c这不是去除行之间的白色 – Will

+0

这可能是因为条形码阅读器**需要**黑色和白色之间的对比。亲自说话 - 我已经处理了条形码的创建 - 我从来没有**见过任何东西*,但是在条形码中有黑/白对比。 – dfd

+0

你说图像中的黑色“绿色屏幕”,留在条形码的白色部分。“您张贴的图片在黑色是透明的,而白色是白色的(如您所要求的)。如果你想要别的东西,请更新问题。 –