将HEIF照片转换为JPEG格式以便上传至后端。

8
我正在维护一个用于将照片从 iPhone 上传到后端服务的应用程序。目前,该服务不支持新的 HEIF 格式,那么有没有办法让 Photos 框架将照片数据转换为 jpeg 格式?
我使用 PHImageManager.requestImageData(for:options:resultHandler:) 方法从图像中检索出一个 Data 对象,然后将其上传到 REST API。
1个回答

12

(新的解决方案,之前的解决方案没有保留EXIF信息)

要获取带有EXIF信息的JPEG格式照片,请使用HEIF图像数据创建一个CIImage对象,并使用CIContext.jpegRepresentation(of:方法将其转换为JPEG编码图像的Data对象。

let imageManager = PHImageManager.default()
var photo : PHAsset
var options : PHImageRequestOptions

imageManager.requestImageData(for: photo, options: options, resultHandler: {
                imageData,dataUTI,orientation,info in
let ciImage = CIImage(data: imageData!)
if #available(iOS 10.0, *) {
    data = CIContext().jpegRepresentation(of: ciImage!, colorSpace: CGColorSpaceCreateDeviceRGB())!
    // upload image data
}

太棒了,谢谢!我一直在处理大量数据 -> 提取exif -> UIImage -> UIIMageJPGRepresentation -> 添加exif -> 保存。 - Rog
我们应该把UIImage传递到这个方法的哪里?不太清楚。 - Tharindu Ketipearachchi
1
在这种情况下,您根本不使用UIImage,而是可以从Data对象创建CIImage,并将其导出为新的jpeg格式数据对象。 - mlidal
太棒了,非常感谢,它帮了我很多! - Alexander

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接