[英]Removing a colour from a UIImage
我有一張圖片:
如您所見,條形碼與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”過濾器,但無法使用它。
是否可以去除黑色部分? 而且,如果是這樣,您能幫助我嗎?
謝謝
有一個過濾器( 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分量表示。 該濾鏡將每個像素設置為白色,但使用原始顏色設置Alpha。 白色(為1.0)是完全不透明的alpha,而黑色(為0.0)是完全透明的。 如果您還有其他灰度級,則這些像素將是半透明的白色。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.