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

问题描述 投票:4回答:4

我从相机中使用AVCaptureSession捕捉图像:

- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection

所述图像被转换成一个UIImage并添加到图像视图。该图像显示在人像方向,符合市场预期。

我试图将图像保存到捕捉会话之间的核心数据。我的核心数据实体与二进制数据类型的图像性能。

coreDataEntity.image = UIImagePNGRepresentation(imageView.image);

一旦用户重新加载以前保存的会话,图像视图具有使用其图像恢复:

 imageView.image = [UIImage imageWithData:coreDataEntity.image];

然而,上述还原图像逆时针旋转90度与它的顶部指向左侧。

在这一点没有图像得到旋转?它是保存过程中或核心数据加载中?

我有90度旋转一个UIImage的方法,但现在看来,在同一图像的后续重新加载时,它会通过额外的90度旋转。我怎样才能知道我已经转动一个UIImage一次?

感谢您的任何帮助!

iphone objective-c ios core-data uiimage
4个回答
5
投票

我不会强迫数据库的格式。通过将其存储在数据库之前转换成PNG,要删除这可能是需要的信息(如方向)。

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

[NSKeyedArchiver archivedDataWithRootObject:image]

与此反序列化

[NSKeyedUnarchiver unarchiveObjectWithData:imageData]

此外,一定要检查出NSValueTransformer,它可以封装这种转换,让你永远不必处理它,一旦它的工作。


6
投票

一年后,你可能已经解决了这个自己,但我自己最近遇到过这个问题,我想我会把我的解决方案。

我改变了存储的图像格式为JPEG。

更改

coreDataEntity.image = UIImagePNGRepresentation(imageView.image);

coreDataEntity.image = UIImageJPEGRepresentation(imageView.image,1.0f);

图像被恢复为前

imageView.image = [UIImage imageWithData:coreDataEntity.image];

希望这可以帮助别人。


1
投票

我的猜测是,它既不在加载或保存。我觉得很可疑,你有一个90度旋转图像,这只是发生了什么你的图像的方法。尝试修改你的方法,通过不同的角度(0例),旋转,看它会影响您的错误。我怀疑你的旋转方法被调用,你不知道它。

另一种可能性是,你认为你的iPhone / iPad的景观,当你把你的照片,但你的应用程序不支持设备旋转。

有一个在您的文章真的不多的信息,所以我只是想探听这里:)


0
投票

斯威夫特4>:保存图像pngData()调用这个函数,在这里使用返回的图像之前:

 func rotatedCopy() -> UIImage {
    if self.imageOrientation == UIImage.Orientation.up {
        return self
    }

    UIGraphicsBeginImageContext(size)

    //draws the image in current context respecting orientation
    draw(in: CGRect(origin: CGPoint.zero, size: size))
    let copy = UIGraphicsGetImageFromCurrentImageContext()

    UIGraphicsEndImageContext()

    return copy!
 }
© www.soinside.com 2019 - 2024. All rights reserved.