Было бы лучше сжать изображение, прежде чем ваше приложение загрузит его. Однако, если это не под вашим контролем, сожмите их после.
Для преобразования изображения в другой формат вы можете использовать функции, определенные в CGImageDestination.h
Я бы сделал функцию метода класса, которая преобразует данное изображение:
+ (NSData*)imageDataWithCGImage:(CGImageRef)CGimage UTType:(const CFStringRef)imageUTType desiredCompressionQuality:(CGFloat)desiredCompressionQuality
{
NSData* result = nil;
CFMutableDataRef destinationData = CFDataCreateMutable(kCFAllocatorDefault, 0);
CGImageDestinationRef destinationRef = CGImageDestinationCreateWithData(destinationData, imageUTType, 1, NULL);
CGImageDestinationSetProperties(destinationRef, (CFDictionaryRef)[NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithFloat:desiredCompressionQuality], (NSString*)kCGImageDestinationLossyCompressionQuality, nil]);
if (destinationRef != NULL)
{
CGImageDestinationAddImage(destinationRef, CGimage, NULL);
if (CGImageDestinationFinalize(destinationRef))
{
result = [NSData dataWithData:(NSData*)destinationData];
}
}
if (destinationData)
{
CFRelease(destinationData);
}
if (destinationRef)
{
CFRelease(destinationRef);
}
return result;
}
Тип изображения может быть kUTTypePNG, но параметр качества, скорее всего, не будет работать. Это также может быть kUTTypeJPEG2000 для ваших нужд.
Вы можете инициализировать новое изображение с данными или сохранить его на диск.