티스토리 뷰
안녕하세요 :) Zedd입니다.
오늘 제가 CIImage를 잠깐 해봤는데..!! 재밌더라구요 :)
그래서 CIImage를 공부하기 전에..!! 궁금증을...
보통 UIImage를 많이 쓰잖아요?
이 UIImage말고도 CGImage, CIImage가 있어요 XD
그 차이점을 알도록 합시다.
UIImage VS CGImage VS CIImage
● UIImage
UIImage라는 이름에 걸맞게, UIImage는 UIKit안에 있는 클래스입니다.
정의도 간단;;;
"An object that manages image data in your app."
"앱의 이미지 데이터를 관리하는 객체입니다."
● CGImage
var aNewUIImage = UIImage(CGImage: imageRef)
//where imageRef is a CGImage
CGImage의 프로퍼티들을 보면,
아주 비트비트스럽죠
● CIImage
CIImage의 CI는 뭘까...
못들어본 사람도 있을거에요! 바로 "Core Image"라는 프레임워크의 약자이며, CIImage는 바로 이 Core Image프레임워크 안에 있는 클래스에요.
정의는
"A representation of an image to be processed or produced by Core Image filters."
"코어 이미지 필터(Core Image filters)에 의해 처리되거나 생성 될 이미지의 표현."
그리고 아주아주 흥미로운 정보가 있어요.
"A CIImage is a immutable object that represents an image. It is not an image."
CIImage는 이미지를 나타내는 불변(immutable)객체 입니다. 그것(CIImage)은 이미지가 아닙니다.
이미지가 아니래요!!! 이미지가 아니면 뭐냐?
"관련된 이미지 데이터만 있으며, 이미지를 생성하는데 필요한 모든 정보가 있습니다"
오...신기..더 알아봅시다.
일반적으로 CIImage 객체는 CIFilter, CIContext, CIColor 및 CIVector와 같은 다른 Core Image 클래스와 함께 사용됩니다. CIImage 객체에는 연관된 이미지 데이터가 있지만 이미지가 아닙니다. CIImage 객체를 이미지 "레시피(recipe)"로 생각할 수 있습니다.
CIImage 객체는 이미지를 생성하는 데 필요한 모든 정보를 가지고 있지만 Core Image 실제로 그렇게 할 때까지(실제로 이미지를 생성할 때 까지) 이미지를 렌더링하지 않습니다.
이 "게으른 평가(lazy evaluation)"방법은 Core Image가 가능한 한 효율적으로 작동하도록합니다.
CIContext 및 CIImage 객체는 변경 불가능합니다. 즉, 각 객체를 스레드간에 안전하게 공유 할 수 있습니다. 여러 스레드가 동일한 GPU 또는 CPU CIContext 객체를 사용하여 CIImage 객체를 렌더링 할 수 있습니다.
하지만 이는 CIFilter객체 경우에는 아닙니다. CIFilter 객체는 스레드간에 안전하게 공유 할 수 없습니다.
앱이 다중 스레드 인 경우 각 스레드는 고유 한 CIFilter 객체를 만들어야합니다.
Core Image는 자동 조정 방법도 제공합니다. 이 메소드는 이미지에 공통적 인 결함이 있는지 분석하고 해당 결함을 수정하기 위해 일련의 필터를 반환합니다. 필터에는 스킨 톤, 채도, 대비 및 그림자의 값을 변경하고 플래시로 인한 적목 현상 또는 기타 아티팩트를 제거하여 이미지 품질을 향상시키는 값이 미리 설정되어 있습니다.
OverView에 있는 내용을 번역해본건데..막 스레드니.......뭐니...잘 이해가 안가죠? 그래서 CIImage로 뭘 할 수 있는데;;
CIImage를 가지고, CIFilter등 다른 Core Image 클래스를 사용하면,
이런거
또는 이런거
를 할 수 있게됩니다. 그냥 쉽게 생각해서!!!!!이미지에 필터 씌울 수 있다!!!!라고 생각하시면 편합니다. 아니 음..Core Image에서의 기능 중 하나라고 보시면 됩니다. 이런 작업들을 하려면 CIImage로 해야한다는 것이죠.
CIFilter를 보면..정말 엄청나게 많은 효과?필터?들을 이미지에 입힐 수 있다는 것을 보실 수 있습니다...
음...솔직히 말해서 CGImage는 아직 조금 감이 안온달까
비트맵을 다룰 수 있다는건 알겠는데....어떤식으로 뭘 할 수 있는지...잘...ㅎㅎ..
오늘 글을 정리하자면, 앱 내에서 기본 이미지 타입을 다룰거라면 UIImage(png가 제일 좋다), 비트맵을 다룰거라면 CGImage, 이미지에 필터나 다양한 효과를 적용하고 싶다면 CIImage를 사용하면 된다?..이정도가 되겠네요 :)
오늘도 도움이 되었길 바래요 :) 혹시 틀린부분이 있다면 댓글로 말해주세요 XD
참고 : https://medium.com/@ranleung/uiimage-vs-ciimage-vs-cgimage-3db9d8b83d94
'iOS' 카테고리의 다른 글
iOS ) VoiceOver사용법 (2) | 2018.03.18 |
---|---|
iOS ) Accessibility(접근성) - Accessibility Programming Guide for iOS (2) (0) | 2018.03.17 |
iOS ) 내 프로젝트에 SwiftLint를 적용해보자 (7) | 2018.03.10 |
iOS ) Kakao API - 시작하기 (7) | 2018.03.08 |
iOS ) Accessibility(접근성) - Accessibility Inspector (0) | 2018.03.01 |
- FLUTTER
- 스위프트 문법
- swift 공부
- swift array
- UIBezierPath
- Combine
- WWDC
- Swift
- fastlane
- 제이슨 파싱
- WidgetKit
- swift tutorial
- swift3
- Xcode
- github
- actor
- 스위프트
- swift delegate
- swift sort
- iOS delegate
- ios 13
- 회고
- Accessibility
- 피아노
- np-hard
- IOS
- np-complete
- Git
- SwiftUI
- WKWebView
- Total
- Today
- Yesterday