Swift - 如何把图片中的某个颜色(#333333)替换成其他颜色(#666666)并输出新的图片?
时间: 2024-01-07 22:02:24 浏览: 220
要把图片中的某个颜色(#333333)替换成其他颜色(#666666)并输出新的图片,可以使用Core Image框架中的CIColorMatrix滤镜。以下是一个示例代码,可以将UIImage中的#333333颜色替换为#666666颜色:
```swift
// 获取原始图片
let originalImage = UIImage(named: "exampleImage")!
// 定义颜色和滤镜
let inputColor = CIColor(red: 0.2, green: 0.2, blue: 0.2) // #333333
let outputColor = CIColor(red: 0.4, green: 0.4, blue: 0.4) // #666666
var matrix = [CGFloat](repeating: 0, count: 16)
matrix[0] = outputColor.red - inputColor.red
matrix[6] = outputColor.green - inputColor.green
matrix[12] = outputColor.blue - inputColor.blue
matrix[4] = inputColor.red
matrix[9] = inputColor.green
matrix[14] = inputColor.blue
let filter = CIFilter(name: "CIColorMatrix")!
filter.setValue(CIImage(image: originalImage), forKey: kCIInputImageKey)
filter.setValue(CIVector(values: matrix, count: 16), forKey: "inputRVector")
filter.setValue(CIVector(values: matrix, count: 16), forKey: "inputGVector")
filter.setValue(CIVector(values: matrix, count: 16), forKey: "inputBVector")
// 创建CIContext和输出UIImage
let context = CIContext(options: nil)
let outputImage = filter.outputImage!
let cgImage = context.createCGImage(outputImage, from: outputImage.extent)
let newImage = UIImage(cgImage: cgImage!)
// 返回新的UIImage
return newImage
```
在此示例中,我们首先获取原始UIImage。然后,我们定义要使用的输入颜色(#333333)和输出颜色(#666666),并计算颜色矩阵以将输入颜色替换为输出颜色。然后,我们使用CIColorMatrix滤镜将图像的颜色矩阵设置为我们计算的颜色矩阵。然后,我们创建一个CIContext并使用它来输出UIImage。最后,我们将新的UIImage返回。
阅读全文