すべてのプロダクト
Search
ドキュメントセンター

Object Storage Service:iOS での HEIC および AVIF のデコード

最終更新日:Mar 18, 2025

iOS 10 以前のバージョンは High Efficiency Image Container (HEIC) デコードをサポートしておらず、iOS 15 以前のバージョンは AV1 Image File Format (AVIF) デコードをサポートしていません。 iOS 10 以前で HEIC 画像をデコードする場合、または iOS 15 以前で AVIF 画像をデコードする場合は、SDWebImage ライブラリを正しく設定する必要があります。

前提条件

SDWebImage V5.0.0 以降を使用しています。

iOS での HEIC デコード

High Efficiency Image Format (HEIF) は、JPEG 形式よりも最新の圧縮アルゴリズムを使用する画像形式です。 HEIF 画像は、同等の品質の JPEG 画像の約 40% のサイズです。

Alibaba Cloud の高性能 HEIC デコードライブラリは、オープンソースライブラリ libheif および libde265 をベースに開発されており、ARM 向けに最適化されています。このデコードの最適化は、同様のオープンソースライブラリの強みを活かしており、デコード速度が大幅に向上します。元のオープンソースバージョンと比較して、Alibaba Cloud によって開発された高性能 HEIC デコードライブラリは、数倍のデコード効率を提供します。高性能 HEIC デコードライブラリのソースコードについては、GitHub をご覧ください。

iOS 11 以降は HEIC デコードをサポートしています。アプリで iOS 10 以前をサポートする必要がある場合は、次の手順を実行して高性能 HEIC デコードライブラリを統合し、SDWebImage が HEIF デコードをサポートできるようにします。

  1. iOS の Podfile を変更して、Alibaba Cloud ポッドリポジトリと HEIF ソフトウェアデコードライブラリの依存関係を追加します。

    # Alibaba Cloud ポッドリポジトリを追加します。
    source 'https://github.com/aliyun/aliyun-specs.git'
    
    pod 'SDWebImageHEIFCoder'
    # 最適化されたライブラリバージョンを指定します。
    pod 'libde265', '1.0.10-aliyun'
    pod 'libheif', '1.12.3-aliyun'
    pod 'libyuv-aliyun', '1.8.48'
  2. 次のコードを使用して、iOS 10 以前で HEIF デコードライブラリのサポートを追加します。

    if (@available(iOS 11.0, macOS 10.13, tvOS 11.0, *)) {
        // iOS 11 以降では、HEIF ソフトウェアデコードを有効にする必要はありません。
    } else {
        // iOS 10 以前で HEIF ソフトウェアデコードを有効にします。 iOS 10 以前では、HEIF ハードウェアデコードはサポートされていません。
        SDImageHEIFCoder *HEIFCoder = [SDImageHEIFCoder sharedCoder];
        [[SDImageCodersManager sharedManager] addCoder:HEIFCoder];
    }

iOS での AVIF デコード

AVIF は AV1 ビデオエンコーディングに基づく新しい画像形式であり、JPEG および WebP よりも高い圧縮率と画像の詳細を提供します。 AVIF は、より最新の圧縮アルゴリズムを使用します。 AVIF 画像は、同等の品質の JPEG 画像の約 35% のサイズです。

iOS は AVIF デコードのネイティブサポートを提供していません。 iOS で AVIF デコードを使用するには、サードパーティのデコードライブラリを統合する必要があります。

  1. Podfile ファイルを変更して、次のデコードライブラリの依存関係を追加します。

    # Alibaba Cloud ポッドリポジトリを追加します。
    source 'https://github.com/aliyun/aliyun-specs.git'
    
    pod 'SDWebImageAVIFCoder'
    pod 'libavif', :subspecs => [
      'libdav1d'
    ]
    # プリコンパイル済みおよび最適化されたバージョンの dav1d を追加します。
    pod 'libdav1d', '1.0.8-aliyun'
  2. デコードライブラリを SDWebImage に接続します。

    SDImageAVIFCoder *AVIFCoder = [SDImageAVIFCoder sharedCoder];
    [[SDImageCodersManager sharedManager] addCoder:AVIFCoder];

HEIC および AVIF 画像の読み込み

デコードライブラリが接続されると、SDWebImage は HEIC デコードと AVIF デコードをサポートします。元のメソッドを使用して画像を読み込むことができます。

  • 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) {
    }];