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
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 |