关于旋转UIImage的问题

时间:2011-07-06 10:19:20

标签: iphone objective-c

我的应用中A UIImage的大小是(320,460)

我使用

创建了另一个UIImage对象
- (id)initWithCGImage:(CGImageRef)imageRef scale:(CGFloat)scale orientation:(UIImageOrientation)orientation

我为UIImageOrientationLeft指定了方向。

然后我打印了新的UIImage对象的大小,结果是(460,320)。

它已经旋转到左侧。

我需要将UIImage存储在我的文档目录中。

NSData *imageData = UIImagePNGRepresentation(rotateImageView);
NSString * path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];

[imageData writeToFile:[path stringByAppendingPathComponent:@"test.png"] atomically:NO];      

但是当我从“test.png”

获得UIImage对象时

它的大小改为(320,460),它已经旋转到其原始状态。

我希望它可以存储在(460,320)

我犯了一些错误吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

我也遇到过这个问题。在Apple代码中传递图像方向时,实际上不会旋转任何像素数据。相反,基本上存在与图像一起存储的枚举值。许多Apple的图像渲染器足够智能,可以读取此枚举值,并使用它来正确显示图像。所以您分享的代码片段只需更改此枚举值即可。尊重此值的渲染器将显示您想要的内容,而许多其他渲染器将忽略它。

有几种解决方案可供选择。

首先,如果您通过iOS显示图像,则可以使用UIImageView的transform属性和CGAffineTransformMakeRotation来获得所需的方向。

其次,您实际上可以旋转原始像素数据,这可以通过以下方式完成:

How to rotate image file?

我会推荐第一个解决方案,因为它更容易编码,效率更高。但是,如果您要在iOS之外共享这些图像,第二种方法将提供更可靠的结果。