调整NSImage的大小而不会丢失其属性

时间:2015-07-15 13:29:11

标签: objective-c macos cocoa nsimage

我正在开发一个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中复制并使用它,但属性是丢失的。

感谢您的帮助。

0 个答案:

没有答案