从核心数据加载的iPhone UIImage逆时针旋转90度.怎么修?

Ale*_*one 4 iphone core-data objective-c uiimage ios

我正在使用AVCaptureSession从相机捕获图像:

- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection
Run Code Online (Sandbox Code Playgroud)

图像将转换为UIImage并添加到图像视图中.正如预期的那样,图像以纵向显示.

我正在尝试将图像保存到捕获会话之间的核心数据中.我的核心数据实体具有二进制数据类型的图像属性.

coreDataEntity.image = UIImagePNGRepresentation(imageView.image);
Run Code Online (Sandbox Code Playgroud)

用户重新加载以前保存的会话后,图像视图将使用以下方式恢复其图像:

 imageView.image = [UIImage imageWithData:coreDataEntity.image];
Run Code Online (Sandbox Code Playgroud)

但是,恢复的图像逆时针旋转90度,顶部指向左侧.

图像在哪个点旋转?是在保存期间还是从核心数据加载期间?

我有一种方法可以将UIImage旋转90度,但是在后续重新加载同一图像时,它会旋转90度.我怎么知道我已经旋转了一次UIImage?

感谢您的任何帮助!

小智 6

一年之后你可能已经解决了这个问题,但我最近自己也遇到了这个问题,并且认为我会提出我的解决方案.

我将存储的图像格式更改为JPEG.

更改

coreDataEntity.image = UIImagePNGRepresentation(imageView.image);
Run Code Online (Sandbox Code Playgroud)

coreDataEntity.image = UIImageJPEGRepresentation(imageView.image,1.0f);
Run Code Online (Sandbox Code Playgroud)

图像像以前一样恢复

imageView.image = [UIImage imageWithData:coreDataEntity.image];
Run Code Online (Sandbox Code Playgroud)

希望这有助于某人.


Sea*_*tag 5

我不会强制数据库中的格式.通过在将PNG存储到数据库之前转换为PNG,您将删除可能需要的信息(如方向).

如果我的假设是正确的,请尝试像这样序列化UIImage:

[NSKeyedArchiver archivedDataWithRootObject:image]
Run Code Online (Sandbox Code Playgroud)

并用此反序列化

[NSKeyedUnarchiver unarchiveObjectWithData:imageData]
Run Code Online (Sandbox Code Playgroud)

此外,请务必检查NSValueTransformer,这可以封装此转换,以便您在工作后永远不必处理它.