如何将从UIImagePickerController中获取的图像保存为HEIF文件?

时间:2017-11-24 09:43:58

标签: ios ios11 heif

如何将从UIImagePickerController获取的图像视为HEIF文件?现在使用相机作为源类型,UIImagePickerControllerOriginalImage只为我提供了UIImage。我想以HEIF格式将图像发送到服务器。这是假设imageExportPreset已设置为当前。

2 个答案:

答案 0 :(得分:1)

古老的问题,但是根据您如何发送数据,您有两个选择。

  1. 将UIImage写入物理文件并发送。

    do {
    
        let ctx = CIContext()
        let ciImage = CIImage(image: uiImage)
        try ctx.writeHEIFRepresentation(of: ciImage!, to: url, format: kCIFormatRGBA8, colorSpace: ctx.workingColorSpace!, options: [:])
    
    } catch {
        print("ERROR", error.localizedDescription)
    }
    
  2. 将UIImage写入数据并将其发送

    let ctx = CIContext()
    let ciImage = CIImage(image: uiImage)
    let data = ctx.heifRepresentation(of: ciImage!, format: kCIFormatRGBA8, colorSpace: ctx.workingColorSpace!, options: [:])
    

答案 1 :(得分:1)

我要用sverin解决方案进行调整的唯一事情是不使用ctx.workingColorSpace,因为您可能会更改图像实际所在的空间。例如,如果将图像重新加载到UIImageView中,您可能会注意到这一点似乎被洗掉了。

还针对Swift 4进行了更新。

do {

    let ctx = CIContext()
    let ciImage = CIImage(image: uiImage)
    try ctx.writeHEIFRepresentation(of: ciImage!, to: url, format: .RGBA8, colorSpace: ciImage.colorSpace!, options: [:])

} catch {
    print("ERROR", error.localizedDescription)
}