繁体   English   中英

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

[英]iPhone UIImage loaded from core data is rotated counterclockwise by 90 degrees. How to fix?

我正在使用 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?

感谢您的任何帮助!

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

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

改变

coreDataEntity.image = UIImagePNGRepresentation(imageView.image);

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

图像恢复如前

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

希望这可以帮助某人。

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

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

[NSKeyedArchiver archivedDataWithRootObject:image]

并用这个反序列化

[NSKeyedUnarchiver unarchiveObjectWithData:imageData]

另外,一定要检查NSValueTransformer ,它可以封装这个转换,这样你就不必在它工作后处理它。

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

另一种可能性是您在拍照时将 iPhone/iPad 横向握住,但您的应用程序不支持设备旋转。

您的帖子中确实没有太多信息,所以我只是在这里钓鱼:)

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

采用

let imageData = image.jpegData(compressionQuality: 1)

代替

let imageData = image.pngData()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM