So it looks like I now have a better solution for copying an image file and reducing its size both in dimensions and in bytes, thanks to a couple of recommendations I received. Of course, other recommendations made clear that I need to learn more about alternative approaches: - some experimentation today with CoreImage only went so far, and I still need to understand more - And I still need to understand in particular whether or not a CoreImage approach would require use of filters (this will matter because I am under the impression that the iPhone does not support CoreImage filters and I need to think about that too)
And I also just tripped across the following thread which suggests there may be image quality issues to take into account eventually, with one approach or another: http://www.cocoabuilder.com/archive/message/cocoa/2008/1/4/195871 For now, I have the approach demonstrated in my test below (employing NSImage to accessing a JPEG, and then writing a copy as a smaller file), and I just need to learn more and understand if there are compelling reasons to use alternative techniques: - (IBAction) showImage:(id)sender{ NSInteger widthInput, heightInput; NSString *inputFileFullPath; NSString *outputFileFullPath; NSImage* inputImage; NSImage* outputImage; NSImage* outputImageFromFile; inputFileFullPath = @"/Users/User/ResourcesTestData/testDataInput/testImage2MB.jpg"; outputFileFullPath = @"/Users/User/ResourcesTestData/testDataOutput/testImageSmaller.jpg"; // Determine the dimensions of the input file ------------- inputImage = [[NSImage alloc] initWithContentsOfFile:inputFileFullPath]; NSBitmapImageRep *imageRep00; imageRep00 = [[NSBitmapImageRep alloc] initWithData:[inputImage TIFFRepresentation]]; widthInput = [imageRep00 pixelsWide]; heightInput = [imageRep00 pixelsHigh]; NSLog(@"inputImage (w,h): (%i, %i)", widthInput, heightInput); // Create a smaller NSImage object ---------------------------- NSSize newSize = NSMakeSize (widthInput*.05, heightInput*.05); outputImage = [[NSImage alloc] initWithSize:newSize]; [outputImage lockFocus]; [[NSGraphicsContext currentContext] setImageInterpolation: NSImageInterpolationHigh]; [inputImage drawInRect:NSMakeRect(0, 0, newSize.width, newSize.height) fromRect:NSZeroRect operation:NSCompositeCopy fraction:1.0]; [outputImage unlockFocus]; // Write the smaller NSImage object to a file, and compress it NSBitmapImageRep *imageRep01; imageRep01 = [[NSBitmapImageRep alloc] initWithData:[outputImage TIFFRepresentation]]; NSData *imageData; double compression = 0.0; NSDictionary *props = [NSDictionary dictionaryWithObject: [NSNumber numberWithFloat:compression] forKey:NSImageCompressionFactor]; imageData = [imageRep01 representationUsingType:NSJPEGFileType properties:props]; [imageData writeToFile:outputFileFullPath atomically:YES]; // Retrieve and display the file written outputImageFromFile = [[NSImage alloc] initWithContentsOfFile:outputFileFullPath]; [imageView setImage:outputImageFromFile]; // Determine the dimensions of the output file ------------- NSBitmapImageRep *imageRep02; imageRep02 = [[NSBitmapImageRep alloc] initWithData:[outputImageFromFile TIFFRepresentation]]; widthInput = [imageRep02 pixelsWide]; heightInput = [imageRep02 pixelsHigh]; NSLog(@"inputImage (w,h): (%i, %i)", widthInput, heightInput); [imageRep00 release]; [imageRep01 release]; [imageRep02 release]; [inputImage release]; [outputImage release]; [outputImageFromFile release]; } > > > > _______________________________________________ Cocoa-dev mailing list (Cocoa-dev@lists.apple.com) Please do not post admin requests or moderator comments to the list. Contact the moderators at cocoa-dev-admins(at)lists.apple.com Help/Unsubscribe/Update your Subscription: http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com This email sent to arch...@mail-archive.com