首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用NSAffineTransform旋转NSImage的结果是文件大小的两倍

使用NSAffineTransform旋转NSImage的结果是文件大小的两倍
EN

Stack Overflow用户
提问于 2015-01-19 22:12:17
回答 1查看 719关注 0票数 0

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

代码语言:javascript
复制
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];

用于将映像保存到磁盘的代码:

代码语言:javascript
复制
[[NSFileManager defaultManager] createFileAtPath:path contents:[img TIFFRepresentation] attributes:nil];

提前感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-28 18:53:43

我仍然不知道造成这种情况的根本原因,但其中一项工作是保存到JPEG表示,而不是TIFF。我所写的方法如下:

代码语言:javascript
复制
- (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对我来说很好。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28034404

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档