首页 文章

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

提问于
浏览
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度,顶部指向左侧 .

At which point does the image get rotated? 在保存期间还是从核心数据加载期间?

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

感谢您的任何帮助!

4 回答

  • 5

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

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

    [NSKeyedArchiver archivedDataWithRootObject:image]
    

    并用此反序列化

    [NSKeyedUnarchiver unarchiveObjectWithData:imageData]
    

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

  • 1

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

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

    更改

    coreDataEntity.image = UIImagePNGRepresentation(imageView.image);
    

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

    图像像以前一样恢复

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

    希望这有助于某人 .

  • 6

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

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

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

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

相关问题