アイキャッチ画像は、[[ファイル:Avif-logo-rgb.svg|thumb|Avif-logo-rgb]]Alliance for Open Media - https://aomediacodec.github.io/av1-avif/, BSD, https://commons.wikimedia.org/w/index.php?curid=114334559による
先日は、プラグイン使わずに既にアップロードしたjpg画像をwebpに一括変換方法について記載しました。そこで、現在では、拡張子がavifになっている画像形式もありますので、同じようにプラグインを使用せずにこれまでにアップロード済みのjpg画像とpng画像をavif形式にwp-content-upload内の画像ファイルを一括変換することも必要かなと思いavifへの一括変換についても記載しておこうかと思います。
拡張子AVIF画像形式は、webpと共に次世代画像形式と言われているフォーマットです。ファイルサイズが非常に小さくで出来てかつ、画像劣化が少ない拡張子のものです。
Wikipediaに詳細は記されています。
2020年にNetflixが行った多くのテストで、AVIFはJPEGよりも圧縮効率が優れているだけでなく、細部がより維持され、ブロックノイズが減り、自然の画像、文字列、グラフィックを合成したときのハードエッジ周りの色のにじみ(英語版)が少なくなった[3]。 2024年1月以降、AVIFは主要なWebブラウザ全てでサポートされている
AVIF - Wikipedia
ということです。
具体的にプラグインなどを使わずにfunction.php内にコードを記載しjpg、png画像をavif形式に一括変換する方法のコードは以下になります。
/**
* 既存の JPG / PNG ファイルを AVIF に一括変換(元画像は残す)
* 実行トリガー:管理者が管理画面にアクセスしたとき(1日1回)
*/
add_action( 'admin_init', 'convert_existing_images_to_avif' );
function convert_existing_images_to_avif() {
// 管理者のみ実行
if ( ! current_user_can( 'manage_options' ) ) {
return;
}
// 二重実行防止(1日に1回だけ)
$last_run = get_transient( 'convert_existing_images_to_avif_last_run' );
if ( $last_run ) {
return;
}
set_transient( 'convert_existing_images_to_avif_last_run', time(), DAY_IN_SECONDS );
$upload_dir = wp_get_upload_dir();
$base_dir = trailingslashit( $upload_dir['basedir'] );
// jpg / jpeg / png を再帰的にスキャン
$iterator = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator( $base_dir, RecursiveDirectoryIterator::SKIP_DOTS )
);
foreach ( $iterator as $file ) {
if ( $file->isFile() ) {
$ext = strtolower( $file->getExtension() );
if ( in_array( $ext, array( 'jpg', 'jpeg', 'png' ), true ) ) {
$file_path = $file->getPathname();
$file_info = pathinfo( $file_path );
$avif_path = $file_info['dirname'] . '/' . $file_info['filename'] . '.avif';
// 既に avif が存在すればスキップ
if ( file_exists( $avif_path ) ) {
continue;
}
// 画像読み込み
if ( $ext === 'png' ) {
$image = @imagecreatefrompng( $file_path );
if ( $image ) {
imagepalettetotruecolor( $image );
imagealphablending( $image, true );
imagesavealpha( $image, true );
}
} else {
$image = @imagecreatefromjpeg( $file_path );
}
if ( ! $image ) {
continue;
}
// --- AVIF生成 ---
if ( function_exists( 'imageavif' ) ) {
imageavif( $image, $avif_path, 80 ); // GD対応環境ならこれでOK
} elseif ( class_exists( 'Imagick' ) ) {
try {
$im = new Imagick( $file_path );
$im->setImageFormat( 'avif' );
$im->setImageCompressionQuality( 80 );
$im->writeImage( $avif_path );
$im->clear();
$im->destroy();
} catch ( Exception $e ) {
// 失敗時はスキップ
}
}
imagedestroy( $image );
}
}
}
}
以下に上記コードの処理内容を簡単に記載しておきますので、参考にしてください。
項目 | 内容 |
---|---|
出力形式 | .avif |
関数 | imageavif() (GD) または Imagick |
実行トリガー | 管理者がダッシュボードを開いたときに自動実行(1日1回) |
元画像 | 削除せず保持 |
処理対象 | /wp-content/uploads/ 配下すべて |
使用方法としては以下に箇条書きにしておきます。
- 上記コードを functions.php の最後に追加します。
- 変換結果は 同名.avif ファイルとして uploads に保存されます。
- WordPress管理画面に1回アクセスすると自動で1日1回だけ実行されます。
というように処理が行われます。
先日のwebpの処理内容とほぼ同じになります。
ですので、管理画面を開かなくても一度だけ処理を実行したい場合には以下のコードを追記して、実行後に削除して問題ないと思われます。
add_action( 'init', 'convert_existing_images_to_avif' );
その他、大量の一括変換以外であれば以下の先日も記載リンクした以下のSquooshにてサイト上でavif変換も可能です。
AV1 Image File Format(AVIF)は、画像や画像シーケンスをAV1で圧縮してHEIFファイル形式で保存するための画像ファイルフォーマットの仕様である。ISOBMFF(英語版)という同じコンテナフォーマットを使用し圧縮にHEVCを使用しているHEICと競合している。バージョン1.0.0は、2019年2月19日に策定された[52]。 AVIFでは、AV1のイントラフレーム(Iフレーム)符号化群の技術を応用して静止画を圧縮している。AVIFのように既存の動画コーデックの符号化技術を応用した例としては、VP8のWebPやH.265のHEIFがある。 AVIFは、以下のような機能をサポートしている。 ハイダイナミックレンジ(HDR) 8、10、12 bitの色深度 ロスレス圧縮と非可逆圧縮 モノクロ(alpha/depth)またはmulti-components 広色域(WCG)、ISO/IEC CICP、ICCプロファイルを含む、任意の色空間 4:2:0、4:2:2、4:4:4のクロマサブサンプリング 粒状性(film grain) AVIFの対応環境[編集] 2018年12月14日、Netflixは最初の.avif形式のサンプル画像を公開し、VLCにサポートが追加された。MicrosoftもWindows 10の「19H1(英語版)」プレビューリリースでFile Explorer、Paint、複数のAPIでの対応を発表し、サンプル画像を公開した。主要ブラウザでもサポートが進んできている。2020年8月、Google Chromeのバージョン85でAVIFがサポートされた[53]。また、2021年10月、 Mozilla Firefoxがバージョン93でAVIFを標準サポート。 [54] (アニメーション対応は大幅に遅れて2023年5月のバージョン113でサポート[55][56])尚Mozillaは当初、バージョン86での標準サポートを予定していたが、これはリリースの前日に撤回されていた [57] [58]。WebKitは2021年3月5日にAVIFをサポート。Safariの画像デコードはmacOS, iOS, iPadOSによって処理されていたが[59]、Safari 16.4以降ではmacOS Ventura, macOS Monterey, macOS Big Surで[60]、iOS 16以降, iPadOS 16以降でAVIFをサポートしている。Microsoft Edgeは2024年1月25日、バージョン121で対応した。Paint.NETは2019年9月18日に読み込みに対応し[61]、2020年10月23日には保存にも対応した[62]。Colorist format conversionとDarktable RAW image dataは、それぞれサポートをリリースし、libavifのリファレンス実装を公開して、プラグインAPIのバージョン3.xと2.10.xに対応するGIMPプラグインの実装が開発された。
AV1 - Wikipedia
新着コメント