使用NSAffineTransform旋转NSImage会导致文件大小增加一倍

时间:2015-01-19 22:12:18

标签: objective-c cocoa nsimage image-rotation nsaffinetransform

我正在使用以下代码翻转(旋转180度)NSImage。 但是当保存到磁盘时,新图像的大小是原始图像的两倍(MB,而不是尺寸)。我希望它与原版大致相同。我怎么能做到这一点?

NSBitmapImageRep *imageRep = [NSBitmapImageRep imageRepWithData:[[_imageView image] TIFFRepresentation]];
NSImage *img = [[NSImage alloc] initWithSize:NSMakeSize(imageRep.pixelsWide, imageRep.pixelsHigh)];
[img lockFocus];
NSAffineTransform *rotator = [NSAffineTransform transform];
[rotator translateXBy:imageRep.pixelsWide yBy:imageRep.pixelsHigh];
[rotator scaleXBy:-1 yBy:-1];
[rotator concat];
[imageRep drawInRect:NSMakeRect(0, 0, imageRep.pixelsWide, imageRep.pixelsHigh)];
[img unlockFocus];

代码我用来将图像保存到磁盘:

[[NSFileManager defaultManager] createFileAtPath:path contents:[img TIFFRepresentation] attributes:nil];

提前致谢!

1 个答案:

答案 0 :(得分:0)

我仍然不知道这个的根本原因,但一个解决方法是保存为JPEG表示而不是TIFF。我写的方法如下:

- (void)CompressAndSaveImg:(NSImage *)img ToDiskAt:(NSString *)path WithCompressionFactor:(float)value{
    NSData *imgData = [img TIFFRepresentation];
    NSBitmapImageRep *imgRep = [NSBitmapImageRep imageRepWithData:imgData];
    NSNumber *compressionFactor = [NSNumber numberWithFloat:value];
    NSDictionary *imageProps = [NSDictionary dictionaryWithObject:compressionFactor forKey:NSImageCompressionFactor];
    imgData = [imgRep representationUsingType:NSJPEGFileType properties:imageProps];
    [imgData writeToFile:path atomically:YES];
}

您可以使用WithCompressionFactor:(float)value参数进行游戏,但0.75可以正常使用。