iOS高效图片压缩:HEIC图像压缩

前言:
HEIF(即高效图像文件格式)是一种新的图像文件格式,在许多方面都比其JPEG更好。该格式由MPEG在2013年开发,声称保存的数据量是JPEG的两倍,并且支持多种类型的图像数据。

extension UIImage {
  enum HEICError: Error {
    case heicNotSupported
    case cgImageMissing
    case couldNotFinalize
  }
  //接口iOS4+。 其中 .heic 要求 iOS11+,
  func heicData(compressionQuality: CGFloat) throws -> Data {
    //1.一个空的数据缓冲区.装图片数据,并创建压缩目标。设置为.heic
    let data = NSMutableData()
    guard let imageDestination =
      CGImageDestinationCreateWithData(
        data, AVFileType.heic as CFString, 1, nil
      )
      else {
        throw HEICError.heicNotSupported
    }
    //2.确保有要处理的图像数据
    guard let cgImage = self.cgImage else {
      throw HEICError.cgImageMissing
    }
    //3.质量控制。
    let options: NSDictionary = [
      kCGImageDestinationLossyCompressionQuality: compressionQuality
    ]
    //4.将图像数据和选项一起应用到目标,完成HEIC图像压缩。
    CGImageDestinationAddImage(imageDestination, cgImage, options)
    guard CGImageDestinationFinalize(imageDestination) else {
      throw HEICError.couldNotFinalize
    }
    
    return data as Data
  }
}

再来说说比JPEG 的好处:

  • 与JPEG相比,文件大小小50%。
  • 包含许多图像项。
  • 图像派生,非破坏性编辑。
  • 图像序列,例如实时照片。
  • 用于存储深度或HDR数据的辅助图像项目。
  • 图像元数据,例如位置或相机信息。

你可能感兴趣的:(iOS高效图片压缩:HEIC图像压缩)