文档

iOS接入HEIC和AVIF解码说明

更新时间:

iOS客户端默认不支持解码HEIC和AVIF格式。如果您需要解码高级图片处理后的HEIC和AVIF格式,您可以配置iOS客户端的SDWebImage图片库,以便支持AVIF和HEIC图片解码。

前提条件

请确保SDWebImage为5.0.0及以上版本。

iOS接入HEIC解码说明

高效率图像格式HEIF(High Efficiency Image Format )是一种压缩图片格式,通过使用更现代的压缩算法,在相同质量的前提下,HEIF文件大小是JPEG文件的40%左右。

阿里云高性能HEIC解码库在开源的libheif和libde265基础上进行二次开发,针对ARM平台做了大量优化,参考了其它同类开源库的优点,在解码链路上的各个环节进行优化,显著得提升了运行速度。相比原始的开源版本,解码的效率有数倍的提升。阿里云高性能HEIC解码库代码链接,请参见Github

iOS11及以上版本支持HEIC解码,无需单独进行接入。如果您的App需要支持iOS11以下版本,请按照以下步骤将客户端文件接入阿里云高性能HEIC解码库,配置后SDWebImage即可支持HEIF图片解码。

  1. 修改iOS客户端的Podfile文件,加入对HEIF软解库的支持代码。
    pod 'SDWebImageHEIFCoder'
  2. 使用以下代码以便支持老版本HEIF解码库。
    if (@available(iOS 11.0, macOS 10.13, tvOS 11.0, *)) {
        //iOS11以后的系统不用启用软解。
    } else {
        // iOS11之前的系统不支持硬解,使用软解。
        SDImageHEIFCoder *HEIFCoder = [SDImageHEIFCoder sharedCoder];
        [[SDImageCodersManager sharedManager] addCoder:HEIFCoder];
    }

iOS接入AVIF解码说明

AVIF是一种基于AV1视频编码的新图像格式,相对于JPEG、Webp图片格式压缩率更高,并且画面细节更好。AVIF通过使用更现代的压缩算法,在相同质量的前提下,AVIF文件大小是JPEG文件的35%左右。

iOS系统原生并不支持AVIF的解码处理,因此需要接入三方的解码库,具体操作如下:

  1. 修改Podfile引入如下解码库依赖。
    pod 'SDWebImageAVIFCoder'
    pod 'libavif', :subspecs => [
      'libdav1d'
    ]
    # 引入预编译优化版本的dav1d。
    pod 'libdav1d',:git => 'https://github.com/aliyun/libdav1d-Xcode.git'
  2. 接入解码库到SDWebImage。
    SDImageAVIFCoder *AVIFCoder = [SDImageAVIFCoder sharedCoder];
    [[SDImageCodersManager sharedManager] addCoder:AVIFCoder];

加载AVIF和HEIC图片

接入新的解码库,SDWebImage将支持AVIF和HEIC解码,此时加载图片的方式无需修改,同原来的调用方式一致。

  • 通过UIImageView加载图片
    [self.imageView sd_setImageWithURL:[NSURL fileURLWithPath:tempFilePath] completed:nil];
  • 直接下载图片
    [[SDWebImageManager sharedManager] loadImageWithURL:[NSURL fileURLWithPath:tempFilePath] options:0 progress:nil completed:^(UIImage * _Nullable image, NSData * _Nullable data, NSError * _Nullable error, SDImageCacheType cacheType, BOOL finished, NSURL * _Nullable imageURL) {
    }];
  • 本页导读 (1)
文档反馈