우선 각 Image가 무엇을 나타내는지 보려고 합니다.
UIImage
모든 이미지 형식에 대한 데이터를 나타내며 관리 가능합니다.
immutable 특성으로 항상 이미지 데이터에서 이미지를 만들어야 합니다.
이미지 객체의 불변 특성은 모든 스레드에서 안전하게 만들고 사용할 수 있음을 의미
UIImageView
에 있는 이미지를 업데이트하려면 새로운UIImage
를 만들어서 설정해야 한다. 따라서 이미지를 변경할 때에는CGImage
,CIImage
의 데이터를 가져와 변환하고UIImage
를 만들어야 합니다.
이미지 객체는 모든 플랫폼 네이티브 이미지 형식을 지원하지만 PNG 또는 JPEG 파일을 사용하는 것이 좋습니다. 두 가지 형식을 모두 읽고 표시하는 데 최적화되어 있으며, 다른 이미지 형식보다 더 나은 성능을 제공합니다. PNG 형식은 무손실이기 때문에 앱 인터페이스에서 사용하는 이미지에 특히 권장됩니다.
Core Graphics images 또는 직접 만든 이미지 데이터와 같은 특정 형식의 데이터에서 애니메이션을 만들 수 있습니다. UIGraphicsGetImageFromCurrentImageContext
함수를 통해서 비트맵 기반 그래픽 컨텍스트와 함께 사용하여 이미지를 만듭니다.
CGImage
Core Graphics 프레임워크에 속해있는 비트맵 이미지 혹은 이미지 마스크입니다.
비트맵으로 관리할 수 있으며, 이미지 위에 그리거나 변형할 때 사용할 수 있습니다.
이미지 마스크는 이미지의 일부분을 보이거나 숨기거나 다른 이미지와 결합하는 기능. 참고 공식 문서
context 내 작업을 하고 UIGraphicsGetCurrentContext()
로 완료된 이미지를 UIImage로 생성하면 됩니다.
Core Graphics
Quartz technology을 활용하여 고화질 출력으로 경량 2D 렌더링을 수행합니다.
path 기반의 draw, 변형, 색상관리, 그라데이션 등 여러 가지를 처리할 수 있습니다.
CIImage
Core Image 프레임워크에 속해있는 이미지입니다.
내부에서 제공되는 CIFilter
에 의해 처리되거나 생성될 이미지의 표현
Core Image
Core Image는 스틸 및 비디오 이미지를 거의 실시간으로 처리하도록 설계된 이미지 처리 및 분석 기술입니다. GPU 또는 CPU 렌더링 경로를 사용하여 작동을 하지만 GPU에서 CIFilter를 사용합니다.
Not Image
Although a CIImage object has image data associated with it, it is not an image
객체에는 연관된 이미지 데이터가 있지만 CIImage는 이미지는 아닙니다.
개체에는 CIImage
이미지를 생성하는 데 필요한 모든 정보가 있지만 Core Image
는 지시가 있을 때까지 실제로 이미지를 렌더링하지 않습니다.
CGContext를 사용하여 처리하는 것보다 CIContext의 필터를 적용하는 게 시간이 적게 걸리는 걸 체감할 수 있습니다.
CIContext
및 CIImage
개체는 변경할 수 없으므로 스레드 간에 각각을 안전하게 공유할 수 있습니다.
그러나 CIFilter
개체의 경우에는 그렇지 않다.
UIImage의 속성
cgImage
데이터를 불러올 때 값이 없을 수도 있습니다.
- If the
UIImage
object was initialized using aCIImage
object, the value of the property isNULL
ciImage
데이터를 불러올 때 값이 없을 수도 있습니다.
- If the
UIImage
object was initialized using aCGImage
, the value of the property isnil
.
정리글
UIImage는 불변성 특성으로 변경된 이미지를 사용하기 위해서는 새로 만들어야 한다.
CIImage는 CIFilter를 사용하여 생성된 이미지 데이터로 GPU가 사용된다. Filter에는 사각형 감지, 얼굴 감지 등이 있다.
CGImage는 비트맵을 사용하여 수정하거나 context 위에 새롭게 그려서 이미지를 새롭게 만들 수 있다.
그리고 GPT의 답변은?
UIImage는 화면에 이미지를 표시하거나 이미지를 로드하고 저장하는 데 사용되며, CGImage는 이미지를 직접 그리거나 이미지를 렌더링하거나 이미지를 조작할 때 사용됩니다. CIImage는 이미지를 필터링하는데 사용되며, GPU 가속을 활용하여 이미지 처리를 수행하므로 대규모 이미지 처리에 적합합니다.
Reference
'Language > Swift' 카테고리의 다른 글
UIActivityViewController 공유하는 그거 (0) | 2024.03.08 |
---|---|
[Swift] 알고리즘을 대비한 메서드들 (0) | 2024.02.18 |
[Swift] Timer vs DispatchSourceTimer (1) | 2023.11.26 |
[Swift] AttributedString (0) | 2023.11.16 |
[Swift] UIButton Configuration (0) | 2023.11.15 |
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!