2017-07-16 109 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

你說圖像中的黑色「綠色屏幕」,留在條形碼的白色部分。「您張貼的圖片在黑色是透明的,而白色是白色的(如您所要求的)。如果你想要別的東西,請更新問題。 –