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

Object Storage Service:モバイル クライアント向けの AVIF エンコーディングサポート

最終更新日:Mar 18, 2025

このトピックでは、AV1 Image File Format(AVIF)エンコーディングをモバイル クライアントに統合する方法について説明し、実装例を示します。

重要

AVIF エンコーディングのサポートは現在実験段階にあり、機能の調整や更新が行われる可能性があります。運用環境に組み込む際は注意し、AVIF エンコーディングに関するドキュメントの更新を監視してください。

AVIF エンコーディング

AVIF(AV1 Image File Format)は、AV1 ビデオエンコーディングに基づく画像ファイル形式であり、ハイ ダイナミック レンジ(HDR)と透過チャネルをサポートしています。 AVIF は、JPEG や PNG と比較して、ファイルサイズを小さくしながら、より高い画質と圧縮性能を実現します。Object Storage Service(OSS)は、AVIF のエンコーディングとデコーディングを完全にサポートしています。

以下の統合例には、重要なコード スニペットのみが含まれています。詳細な統合例と完全なサンプルコードにアクセスするには、iOS のサンプル プロジェクトAndroid のサンプル プロジェクトをダウンロードしてください。

iOS

依存関係

iOS は AVIF エンコーディングをネイティブでサポートしていません。 iOS で AVIF デコーディングを実装するには、サードパーティ ライブラリである libavifSVT-AV1 を使用する必要があります。

重要

オープンソースの libavif と SVT-AV1 には、エンコーディング パフォーマンスが低い、奇数サイズの画像エンコーディングがサポートされていないなど、一定の制限があります。これらの問題に対処し、AVIF エンコーディング パフォーマンスを向上させるために、最適化されたバージョンのこれらのライブラリを提供しています。最適化されたバージョンを使用することをお勧めします。

CocoaPods を使用して libavif と SVT-AV1 を追加します。

  1. Podfile に Alibaba Cloud のリポジトリ宣言を次のように追加します。

    source 'https://github.com/aliyun/aliyun-specs.git'
  2. AVIF のエンコーディングとデコーディングのための依存関係を次のように追加します。

    pod 'SDWebImage'
    pod 'SDWebImageAVIFCoder', '0.12.1'
    pod 'libavif/svt-av1', '1.1.1'
    pod 'svt-av1', '1.2.2'
    pod 'libdav1d', '1.2.0'

画像エンコーディング呼び出し

SDWebImage は、特定の画像形式のエンコーディングとデコーディングを可能にするコーデック ライブラリを提供します。 SDWebImageAVIFCoder を統合することで、ユーザーは画像を AVIF に変換できます。

  1. AppDelegate.m ファイルで、次の行を追加して SDWebImageAVIFCoder をインポートします。

    SDImageAVIFCoder *avifCoder = [SDImageAVIFCoder sharedCoder];
    [[SDImageCodersManager sharedManager] addCoder:avifCoder];
  2. SDWebImage を使用して画像を AVIF にエンコードします。

    // エンコードする画像。
    UIImage *image = [UIImage imageNamed:@"test-image.jpg"];
    id<SDImageCoder> coder = [SDImageCodersManager sharedManager];
    NSData *encodedData = [coder encodedDataWithImage:image format:SDImageFormatAVIF options:nil];

エンコーディングが完了したら、エンコードされた AVIF 画像をローカル デバイスに保存します。

Android

依存関係

エンコーディングとデコーディング用の ARR ファイルを追加します: avifandroidjni-release.aar

画像エンコーディング呼び出し

AvifDecoder クラスの encodeRGBA8888 メソッドを使用して、AVIF エンコーディングを実装します。

/**
 * rgba データを AVIF 画像にエンコードします。
 * @param rgbaData RGBA8888 バイト バッファ。
 * @param length バッファ長。
 * @param width 画像の幅。
 * @param height 画像の高さ。
 * @return エンコーディング後のバイト配列。
 */
public static native byte[] encodeRGBA8888(ByteBuffer rgbaData, int length, int width, int height);

次のサンプルコードは、エンコーディング呼び出しの例を示しています。ここで、avifBytes はエンコーディング後のバイト配列です。

val pixelBuffer = ByteBuffer.allocateDirect(bitmap.width * bitmap.height * 4)
bitmap.copyPixelsToBuffer(pixelBuffer)
val avifBytes = AvifDecoder.encodeRGBA8888(
    pixelBuffer,
    bitmap.width * bitmap.height * 4,
    bitmap.width,
    bitmap.height
)

次のステップ

デコーディングのサポートを実装するには、Android での HEIC および AVIF デコーディングiOS での HEIC および AVIF デコーディングの AVIF デコーディングに関する説明を参照してください。