- (void)resizeImageAtPath:(NSString *)imagePath {

    // Create the image source (from path)
    CGImageSourceRef src = CGImageSourceCreateWithURL((__bridge CFURLRef) [NSURL fileURLWithPath:imagePath], NULL);

    // To create image source from UIImage, use this
    // NSData* pngData =  UIImagePNGRepresentation(image);
    // CGImageSourceRef src = CGImageSourceCreateWithData((CFDataRef)pngData, NULL);

    // Create thumbnail options
    CFDictionaryRef options = (__bridge CFDictionaryRef) @{
            (id) kCGImageSourceCreateThumbnailWithTransform : @YES,
            (id) kCGImageSourceCreateThumbnailFromImageAlways : @YES,
            (id) kCGImageSourceThumbnailMaxPixelSize : @(640)
    };
    // Generate the thumbnail
    CGImageRef thumbnail = CGImageSourceCreateThumbnailAtIndex(src, 0, options); 
    CFRelease(src);
    // Write the thumbnail at path
    CGImageWriteToFile(thumbnail, imagePath);
}


대용량 이미지를 resize를 할 경우 메모리에 모든 UIImage객체를 올린 뒤 draw하는 방식을 사용하게 되면 resize를 할 경우 메모리 문제에 종종 생기게 된다


파일로 저장된 대용량 이미지를 파일 상태에서 바로 resize한 후 저장하는 코드를 사용할 경우 메모리 문제를 해결 할 수 있다

+ Recent posts