How to convert a UIImage into NSData

You can store a UIImage (or an NSImage on Mac) as raw data. This can be useful if you’d like to save it in Core Data.

Here’s how you convert a UIImage into NSData:

NSData *imageData = UIImagePNGRepresentation(yourImage);

To convert NSData back to a UIImage, you can do this:

UIImage *image = [[UIImage alloc]initWithData:yourData];

The UIImage class is not available on Mac OS X, but its counterpart NSImage is almost identical.


Core Data can convert images to and from data on the fly by using an NSValueTransformer.
Here’s one that works for images:

@implementation PatchBayTransformer

+(BOOL)allowsReverseTransformation {
    return YES;

+(Class)transformedValueClass {
    return [NSData class];

- (id)transformedValue:(id)value {
    // takes the UIImage into data and returns it
    NSData *imageData = UIImagePNGRepresentation(value);
    return imageData;

- (id)reverseTransformedValue:(id)value {
    // takes data and returns it as a UIImage
    UIImage *image = [[UIImage alloc]initWithData:value];
    return image;

Leave a Reply