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からWebAPI(screendot)経由で他サイトのスクリーンショットを取得する方法
PHPで他サイトのスクリーンショットを取得したい。今回はライブラリは無しで実現し ...
-
-
MySQLとPHPの「image-comparator」ライブラリを使用して類似画像検索を実装する方法
先日PHPで画像を比較して類似度を算出する「image-comparator」ラ ...
-
-
PHPでダミー画像(プレースホルダー画像)を表示する「PHP-Dummy-Image-Generator」の利用方法
先日JavaScriptでダミー画像(プレースホルダー画像)を表示する「Hold ...
-
-
PHPで画像のフォーマット(拡張子)の変換
画像のアップロードでjpg/png/gif形式を受け付けつつ、 最終的にjpgで ...
-
-
PHPでスマホ(iPhone / Android)に画像をダウンロードさせる方法とダウンロード後の保存場所について
PHPで作ったシステムにスマホ(iPhone / Android)でアクセスし何 ...