본문 바로가기
공부/스위프트

[스위프트] 이미지 평균 색 추출

by 초코팅촉 2024. 1. 5.
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

 

다음의 글을 참고했다.

이미지의 평균 색상을 추출하기

 

이미지의 평균 색상을 추출하기

iOS나 Mac OS의 현행 디자인 코드는 Flat으로 음영과 그림자 등의 그래픽 적인 요소들을 최대한 배제하고, 색과 선, 레이어의 적층으로 깊이와 구분감을 부여하는 것이 특징이다. 개인적으로 이러한

chillog.page