If you need compression, and you are not against loss of image quality, save the file in JPEG format. To do this, you need to get the NSBitmapImageRep from your image, and then get the JPEG view:
//yourImage is an NSImage object NSBitmapImageRep* myBitmapImageRep; if(useActualSize) { //this will produce an image the full size of the NSImage backing bitmap, which may not be what you want myBitmapImageRep = [NSBitmapImageRep imageRepWithData: [yourImage TIFFRepresentation]]; } else { //this will get a bitmap from the image at 1 point == 1 pixel, which is probably what you want NSSize imageSize = [yourImage size]; [yourImage lockFocus]; NSRect imageRect = NSMakeRect(0, 0, imageSize.width, imageSize.height); myBitmapImageRep = [[[NSBitmapImageRep alloc] initWithFocusedViewRect:imageRect] autorelease]; [yourImage unlockFocus]; } CGFloat imageCompression = 0.7; //between 0 and 1; 1 is maximum quality, 0 is maximum compression // set up the options for creating a JPEG NSDictionary* jpegOptions = [NSDictionary dictionaryWithObjectsAndKeys: [NSNumber numberWithDouble:imageCompression], NSImageCompressionFactor, [NSNumber numberWithBool:NO], NSImageProgressive, nil]; // get the JPEG encoded data NSData* jpegData = [myBitmapImageRep representationUsingType:NSJPEGFileType properties:jpegOptions]; //write it to disk [jpegData writeToFile:[NSHomeDirectory() stringByAppendingPathComponent:@"foo.jpg"] atomically:YES];
source share