[UIKit] UIView를 이미지로 캡쳐하기, UIImage를 파일로 만들기

UIView를 UIImage로 캡쳐하는 방법

NSView를 이미지로 캡쳐하는 방법에는 여러가지가 있는데, 캡쳐한 이미지를 파일로 저장하기 간편하게 쓰는 방법은 NSBitmapImageRep 클래스를 사용해서 현재 포커스된 뷰의 영역을 바로 캡쳐하는 것이다. (그 외에 PDF데이터를 바로 추출하거나, 뷰의 CALayer를 NSImage 상에서 렌더하는 방법등 여러 가지 방법이 있을 수 있다.)

코코아 터치에서는 NSBitmapImageRep 와 같은 클래스가 없다. 대신에 비트맵 이미지를 그래픽 컨텍스트에서 얻을 수 있다는 점을 이용하여 다음과 같은 방법을 쓸 수 있다.

-(UIImage*)captureView:(UIView *)theView
{
    UIGraphicsBeginImageContextWithOptions(theView.bounds.size,
            theView.isOpaque, 1.0);
    ;
    UIImage *resultImage =
        UIGraphicsGetImageFromCurrentImageContext();
    return UIImage;
}

그럼 UIKit에서 이미지를 파일로 저장하려면 어떻게 해야할까? 코코아에서는 NSBitmapImageRep이 그래픽 포맷에 대응하는 데이터를 제공했는데, UIKit에서는 이 클래스를 사용할 수 없다고 했다.

UIKit은 이를 위해 다른 함수를 제공하고 있다. UIImageJPEGRepresentation()UIImagePNGRepresentation()이 그것이다. 즉 모바일 기기에서 통용할 수 있는 그래픽 포맷은 사실상 PNG, JPEG 이므로 이 둘을 생성하는 함수를 아예 프레임워크가 지원하고 있다.

이들 함수는 각각 다음과 같이 선언되어 있으며, 이 함수를 통해 얻은 데이터를 디스크에 기록하면 바로 JPEG, PNG 파일을 얻을 수 있다. 참고로 compressionQuality는 0.0~1.0으로 1.0이 가장 좋은 화질을 의미한다.

NSData * UIImagePNGRepresentation ( UIImage *image);
NSData * UIImageJPEGRepresentation (
        UIImage *image,
        CGFloat compressionQuality );

물론 이미지를 바로 카메라롤에 저장하는 것과 이미지를 파일로 만드는 것은 좀 다른 이야기이긴하다.

참고 : NSView를 이미지로 만들기