从 Filemanager 加载时 UIImage 自动旋转

Posted

技术标签:

【中文标题】从 Filemanager 加载时 UIImage 自动旋转【英文标题】:UIImage automatically rotated when loaded from Filemanager 【发布时间】:2017-07-28 12:07:16 【问题描述】:

当我在人像模式下拍照时,savedImage设置为UIImageView时会自动旋转。

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *filePath = [[paths objectAtIndex:0] stringByAppendingPathComponent:@"ProfilePicture.png"];
[UIImagePNGRepresentation(image) writeToFile:filePath atomically:YES];

UIImage *savedImage = [UIImage imageWithData:[NSData dataWithContentsOfFile:filePath]];

但是当我使用UIImageJPEGRepresentation: writeToFile: atomically: 方法时,结果图像没有问题。

谁能解释为什么我在使用 UIImageJPEGRepresentation 而不是在 UIImagePNGRepresentation 中时没有得到正确方向的图像。

注意:我试过了

UIImage *imageToDisplay =
     [UIImage imageWithCGImage:[originalImage CGImage]
              scale:[originalImage scale]
              orientation: UIImageOrientationUp];

保存imageToDisplay,但不工作

【问题讨论】:

【参考方案1】:

这是因为 JPEG 的 EXIF 数据中的旋转标志。每个图像文件都有元数据属性。如果元数据指定图像的方向,除 Mac 之外的其他操作系统通常会忽略该方向。大多数拍摄的图像都将其元数据属性设置为直角。所以 Mac 以 90 度旋转的方式显示它。您可以在 Windows 操作系统中以正确的方式看到相同的图像。请查看this 答案,其中显示了更多详细信息

【讨论】:

以上是关于从 Filemanager 加载时 UIImage 自动旋转的主要内容,如果未能解决你的问题,请参考以下文章

从目录加载 UIImage 不再起作用

如何保存和加载 Image swift 4?

无法从 iPhone 文档目录位置中的已保存文件重新加载 UIImage

UIImage * 是 __NSCFArray 而不是 UIImage

FileManager.contentsEqual 在比较复制的文件时返回 false

从 NSData 获取较低质量的 UIImage?