转换为JPEG给定图像数据和UTI

问题描述:

给定数据及其UTI,将其转换为JPEG的正确方法是什么?转换为JPEG给定图像数据和UTI

PHImageManager.default().requestImageData(for: asset, options: options, resultHandler: { (imageData: Data?, dataUTI: String?, _, _) in 
    guard let imageData = imageData, let dataUTI = dataUTI else { return } 
    if !UTTypeConformsTo(dataUTI as CFString, kUTTypeJPEG) { 
     //TODO: Convert to JPEG 

    } 
}) 

如果是UTType是JPEG,你已经有图像的正确JPEG编码表示。如果要将该图像显示在屏幕上,则只需使用初始化程序初始化具有给定数据的UIImage对象。

+0

的UTType是HEIC。我想把HEIC变成JPEG – kintan

+2

你可以在[WWDC](https://developer.apple.com/videos/wwdc2017/)上忽略新的高效格式,例如'HEIC'苹果介绍了它们并承诺它们会在需要时会自动转换为更常见的'JPEG'格式。但是如果你需要将HEIC编码的数据转换为JPEG,我建议你用这些数据创建一个'UIImage',并使用'UIImageJPEGRepresentation(_:_ :)'函数将其编码为'JPEG'。 –

+0

谢谢。 phasset不会自动转换为更常见的JPEG格式。 – kintan

刚把这个问题与PHImageManager返回数据.heic代替.JPEG,这个工作对我来说:

PHImageManager.default().requestImageData(for: asset, options: PHImageRequestOptions(), resultHandler: { (data, string, orient, info) in 
    if string?.range(of: ".heic") != nil || string?.range(of: ".heif") != nil { 
     let rawImage = UIImage(data: data!) 
     self.uploadData = UIImageJPEGRepresentation(rawImage!, 1.0) 
     self.uploadName = "public.jpeg" 
    } else { 
     self.uploadData = data 
     self.uploadName = string 
    } 
    self.uploadFileToServer() 
})