티스토리 뷰

iOS

iOS ) CIFilter 사용해보기

Zedd0202 2020. 5. 1. 19:46
반응형

 

안녕하세요 :) Zedd입니다.

지금 어떤걸 하고 있는데..CIFilter를 사용해야해서요!

CIFilter를 사용해보는 방법을 공부해보려고 합니다아ㅏ

그냥 간단하게만 볼거에용

 

먼저 CI를 보면 짐작하실 수 있듯이..Core Image에 있는 친구입니다!

출처 : https://developer.apple.com/library/archive/documentation/GraphicsImaging/Conceptual/CoreImaging/ci_tasks/ci_tasks.html#//apple_ref/doc/uid/TP30001185-CH3-SW4

자 이미지에 필터를 적용하는 가장 기본적인 방법...이라고 애플이 알려준건데 그냥 바로 따라하면 되겠지

https://developer.apple.com/documentation/coreimage/processing_an_image_using_built-in_filters

 

Processing an Image Using Built-in Filters | Apple Developer Documentation

Article Processing an Image Using Built-in Filters Apply effects such as sepia tint, highlight strengthening, and scaling to images. OverviewYou can add effects to images by applying Core Image filters to CIImage objects. Figure 1 shows three filters chain

developer.apple.com

여기에도 나와있다는 사실??!?!?!?! 뿌슝빠슝

 

아무튼 필터를 적용하는 방법..? 꼭 필터가 아니더라도..다음과 프로세스가 아주 기본적인것 같습니다. 

 

1. CIContext 만들긔

CIContext는 이미지 처리 결과를 렌더링하고 이미지 분석을 수행하기 위한 evaluation context라고 해요. 

CIImage처리는 CIContext에서 발생합니다.

CIContext를 만드는 것은 비용이 많이 드니깐 초기 설정 중에 CIContext만들어서 앱 전체에서 사용하렴~~~~ 

 

2. 이미지 URL을 사용해서 CIImage만들기

이미지가 있어야;;;;;; 머 편집을 하든 말든 할거 아냐;;;;인정???;;

이미지를 불러옵니다. 

저는 UIImagePickerViewController를 사용할거라서 info에서 바로 imageURL가져올거

그리고 그 URL을 가지고 CIImage를 이렇게 만들면 됩니다! CIImage만들기 짱 쉬움

 

 

3. 어떤 필터 적용할거?

네 어떤 필터를 사용할건지 정해야하는데....그걸 String으로 줘야하는군여ㅛ

따흑

이거 이름 모여있는 곳 없나,..?

https://developer.apple.com/library/mac/documentation/GraphicsImaging/Reference/CoreImageFilterReference/Reference/reference.html#//apple_ref/doc/uid/TP40004346

 

Core Image Filter Reference

Core Image Filter Reference

developer.apple.com

있다.

애플 공-식

위 링크의 개좋은 점. 미리보기 쌉가능

전 걍 CISepiaTone로 해줄게요~

자 

필터를 만들었습니다. 

그럼 이걸 이미지 데이터에 적용해야겠죠!?!?! 적용을 ㅎㅐ야할거아냐 그치

 

4. 필터 적용하기

이렇게 해줍니다.

아니 무슨 다 String을 짐작도 안가는것들을 넣어줘야하네..

중요한건 

kCIInputImageKey가 뭐라해야하지 그 이미지에 필터를 먹이는 친구라고 해야하나...

 

kCIInputIntensityKey는 강도?라고 생각하면 될 것 같아요. 이건 해줘도 되고 안해줘도 됨..

안해주면 기본 intensity가 들어가는 듯

 

이미지 데이터에 필터 적용 -> 필터 적용된 이미지 데이터

를 얻어야하는거잖아요?

CIFilter에는 outImage라는 친구가 있습니다.

CIImage타입이고, 필터에 구성된 작업을 캡슐화한?(encapsulates) 친구에요.

 

자 아직까진 우리는 displayable image가 아니라..image data인 상태입니다.

이걸 displayable image로 만들어줘야겠죠>??? 즉 UIImge로 만들어줘야겠죠!?!?!?

 

5. displayable image로 만들기

 

UIImage에는 CIImage를 받을 수 있는 이니셜라이저가 있어서 이렇게 간단하게 만들 수 있답니다.

암튼 결과는 이럼

 

뭔가 빠진 것 같은데...?

뭐지..왜만들라고 한거지?

출처 : https://developer.apple.com/library/archive/documentation/GraphicsImaging/Conceptual/CoreImaging/ci_tasks/ci_tasks.html#//apple_ref/doc/uid/TP30001185-CH3-SW4

context를 CGImage로 만들 수 있고 그걸 다시 UIImage로 만들 수 있어요.

근데 CIImage로 바로 만들 수 있어서 안쓴건ㄱ가...?

아ㅣ무튼 굳이 context를 쓰고 해보자면

이렇게 할 수 있습니다. 

 

context를 사용하면 CIImage -> CGImage -> UIImage

사용안하면 CIImage -> UIImage

뭐지..

 

뭐 암튼 필터 적용하는거 어렵지 않군요..

오늘 한거는 github에 올려놨어요..!

UIImage, CGImage, CIImage에 대해 알고싶으시다면...

다음 글을 읽어보시는 ㄷ것도 나쁘지 않을 것 같다는 생각이..큼큼

 

iOS ) UIImage VS CGImage VS CIImage

안녕하세요 :) Zedd입니다. 오늘 제가 CIImage를 잠깐 해봤는데..!! 재밌더라구요 :) 그래서 CIImage를 공부하기 전에..!! 궁금증을... 보통 UIImage를 많이 쓰잖아요? 이 UIImage말고도 CGImage, CIImage가 있어..

zeddios.tistory.com

 

'

반응형

'iOS' 카테고리의 다른 글

iOS ) UIKey  (0) 2020.05.16
iOS ) PHContentEditingInput  (0) 2020.05.05
Line graph animation  (1) 2020.04.23
UIBezierPath (8) - line graph  (0) 2020.04.22
iOS ) pngData VS jpegData(compressionQuality:)  (0) 2020.04.20