728x90
반응형
스위프트에서 이미지뷰를 쓸때 이미지의 평균색을 추출하는 방법은 다음과 같다.
extension UIImage{
var avgImageColor: UIColor? {
guard let inputImage = CIImage(image: self) else { return nil }
let extentVector = CIVector(x: inputImage.extent.origin.x, y: inputImage.extent.origin.y, z: inputImage.extent.size.width, w: inputImage.extent.size.height)
guard let filter = CIFilter(name: "CIAreaAverage", parameters: [kCIInputImageKey: inputImage, kCIInputExtentKey: extentVector]) else { return nil }
guard let outPutImage = filter.outputImage else { return nil }
var bitmap = [UInt8](repeating: 0, count: 4)
let context = CIContext(options: [.workingColorSpace: kCFNull!])
context.render(outPutImage, toBitmap: &bitmap, rowBytes: 4, bounds: CGRect(x: 0, y: 0, width: 1, height: 1), format: .RGBA8, colorSpace: nil)
return UIColor(red: CGFloat(bitmap[0]) / 255, green: CGFloat(bitmap[1]) / 255, blue: CGFloat(bitmap[2]) / 255, alpha: CGFloat(bitmap[3]) / 255)
}
}
이렇게 extension으로 작성하면 UIImage의 avgImageColor 변수로 가져올 수 있기 때문에 유용하다.
실제로 쓸때는 아래처럼 쓴다.
imageView.image?.avgImageColor
다음의 글을 참고했다.
728x90
반응형
'공부 > Apple' 카테고리의 다른 글
[스위프트] UIKit 스크린 사이즈 가져오기(deprecated) (0) | 2024.01.24 |
---|---|
[스위프트] 배경색 바꾸기 및 애니메이션 적용 (1) | 2024.01.05 |
[스위프트] UIKit에서 UISegmented Control을 써보자 (0) | 2024.01.04 |
[스위프트] final 메서드와 static 메서드 (2) | 2024.01.04 |
[스위프트] 인스턴스 메서드와 타입 메서드 (0) | 2024.01.03 |