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 this 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;

Jay is the CEO and founder of WP Hosting, a boutique style managed WordPress hosting and support service. He has been working with Plesk since version 9 and is a qualified Parallels Automation Professional. In his spare time he likes to develop iOS apps and WordPress plugins, or draw on tablet devices. He blogs about his coding journey at and