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

时间:2012-04-20 11:48:50

标签: iphone objective-c ios core-data uiimage

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

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

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

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

coreDataEntity.image = UIImagePNGRepresentation(imageView.image);

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

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

然而,恢复的图像逆时针旋转90度,顶部指向左侧。

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

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

感谢您的帮助!

5 个答案:

答案 0 :(得分:6)

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

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

变化

coreDataEntity.image = UIImagePNGRepresentation(imageView.image);

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

图像像以前一样恢复

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

希望这有助于某人。

答案 1 :(得分:5)

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

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

[NSKeyedArchiver archivedDataWithRootObject:image]

并使用此

反序列化
[NSKeyedUnarchiver unarchiveObjectWithData:imageData]

此外,请务必查看NSValueTransformer,它可以封装此转换,以便您在工作后无需处理它。

答案 2 :(得分:1)

我的猜测是,它既不是在加载或保存期间。我发现你有一种方法可以将图像旋转90度,这就是你的图像正在发生的事情。尝试修改您的方法以不同的角度旋转(例如零)并查看它会影响您的错误。我怀疑你的旋转方法被调用了,你不知道它。

另一种可能性是,当您拍照时,您的iPhone / iPad仍处于横向状态,但您的应用不支持设备旋转。

你的帖子真的没什么信息所以我只是在这里钓鱼:)

答案 3 :(得分:0)

Swift 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!
 }

答案 4 :(得分:0)

使用

entryPoint

代替

app.config