我正在开发一个mac应用程序,我处理图像。质量和ICC配置文件非常重要。有时我需要调整图像大小,因为我将它们发送到服务器并且它们不能太重。
我没有调整大小本身的问题,但是我使用了图像的副本而我丢失了ICC配置文件:例如,我有一个sRGB图像,但是在调整大小后它需要屏幕的配置文件,我想要保留sRGB档案。
-(NSData*)resizeImage: (NSSize)newSize { // I calcul newSize before and the values are good
NSImage *smallImage = [[NSImage alloc] initWithSize: newSize];
[smallImage lockFocus];
[image setSize: newSize]; //image is the image I want to resize
[[NSGraphicsContext currentContext] setImageInterpolation:NSImageInterpolationHigh];
[image drawAtPoint:NSZeroPoint fromRect:CGRectMake(0, 0, newSize.width, newSize.height) operation:NSCompositeCopy fraction:1.0];
[smallImage unlockFocus];
return ([self returnImageAsJpeg:smallImage]);
}
这是
- (NSData *)returnImageAsJpeg:(NSImage *)smallImage
方法:
-(NSData *)returnImageAsJpeg:(NSImage *)smallImage {
NSData *imageData = [smallImage TIFFRepresentation];
NSBitmapImageRep *imageRep = [NSBitmapImageRep imageRepWithData:imageData];
NSNumber *compressionFactor = [NSNumber numberWithFloat:0.6];
NSDictionary *imageProps = [NSDictionary dictionaryWithObject:compressionFactor forKey:NSImageCompressionFactor];
imageData = [imageRep representationUsingType:NSJPEGFileType properties:imageProps];
return (imageData);
}
我知道代码不是很干净,但我的问题是:如何在不丢失其属性的情况下调整NSImage的大小。在这里,我在smallImage中复制并使用它,但属性是丢失的。
感谢您的帮助。