PHPでjpg / png画像をAVIF形式の画像に変換する方法
PHPでjpg / png画像をAVIF形式の画像に変換しサーバに保存したい。WebP画像だとclass.upload.phpを使うのが楽で良いんだけどAVIF画像は対応していない模様。そのためバニラPHPにてAVIF画像に変換(場合によっては圧縮)する方法をメモ。
目次
ソースコード
<?php
$file = './001.png';
$quality = 30;
changeAVIF($file, $quality);
function changeAVIF( $file, $quality = 30 ){
    $path_parts = pathinfo($file);
    $ext = $path_parts['extension'];
    if( $ext == 'jpg' ){
        $old_img = imagecreatefromjpeg($file);
    }else if( $ext == 'png' ){
        $old_img = imagecreatefrompng($file);
    }else{
        return false;
    }
    imageavif($old_img, $path_parts['filename'] . '.avif', $quality);
}
changeAVIF関数の第一引数に変換したいファイルパスを、第二引数に圧縮具合を数値を渡すと変換される。
imageavif
リファレンス
https://www.php.net/manual/ja/function.imageavif.php
注意点
圧縮用オプションのデフォルトは30
圧縮に関して第三引数で設定する。0~100までで数値の大きい方が画質が高くなる。尚、デフォルトは30になる点に注意。
PHPのバージョンは8.1以上
imageavif関数が使えるのはPHPのバージョンが8.1以上となる点に注意。
その他
圧縮後のサイズについて
圧縮のオプションをデフォルトの30で試したところ、以下のよう約10分の1になった。
- png 1,074,853byte -> 117,227byte
- jpg 117,227byte -> 11,903byte
AVIFの対応ブラウザについて
こちらのサイトを見る限り主要ブラウザは対応している模様。
関連記事
- 
					
													  
- 
					PHPで画像を分割し並べ替えて出力したものをJavaScriptで復元する方法ある電子書籍サイトをブラウザの開発者ツールで見てみたところ、PHPでページ画像を ... 
- 
					
													  
- 
					ファイルの更新日付取得とリネームやりたかった事は、画像ファイルの更新日時取得と リネーム。 ■参考サイト htt ... 
- 
					
													  
- 
					formのinput="file"でディレクトリを選択させ、ディレクトリ内のファイルを全てアップロードする方法フォームで複数のファイルをアップロードしたい場合、input="file"を複数 ... 
- 
					
													  
- 
					PHPで画像にモザイクをかけて保存やりたかった事はPHPで ・モザイク処理 ・元の画像とは別にファイル名をつけて保 ... 
- 
					
													  
- 
					imgタグのsrc属性のURLにPHPでタイムスタンプを付与しキャッシュ対策する方法imgタグで画像を表示する際、画像を書き換えても同じものが表示されるというケース ...