以下の内容はhttps://mattintosh-note.jp/entry/20250718/1752810182より取得しました。


AVIFを使おうと思ったけど結局WebPをやめてJPEGにした

どういうことだってばよ。

フィギュアレビューで有名な Asahiwa さんの記事で AVIF の話が出てたので「そういえばシンレンタルサーバー(XServer)って AVIF 対応してくれたのかな…」と思って確認してみたけど相変わらず Imagick のサポートフォーマットに入っていなかった。

が、php8.3 -i を見てみたらなんと GD が AVIF に対応していた。

うちのブログは恐らく頭のおかしい部類で画像リクエストはすべてリアルタイムで加工して返却している。次の画像の右上にはきっとあなたの IP アドレスが表示されているはず。

https://hobby.mattintosh-note.jp/wp-content/uploads/2025/07/b065db7269985f3ec50d6ec509838677.jpeg

それもこれも無断転載する輩がいるからで画像リクエストすべてをスクリプトに通してこのような情報を埋め込んでいるわけなんだけども(あと JPEG と WebP のファイル両方管理するのが面倒くさい)。前々から WebP の画質の汚さが気になって気になって仕方がなかった。もっと綺麗な画質で上げてあるんだけどなぁ…と常々思っていたのでさっそくスクリプトを書き換え。

Imagick から GD に画像を渡して AVIF を出力することは出来たんだけど色々と問題が出てきた。

  • GD が TIFF を受け取らない(Imagick からの出力を BMP2/BMP3 か PNG にすることで回避可能)
  • ICC プロファイルがおかしくなる
  • くっっっっっっっっっっそ重い

ICC プロファイルがおかしくなる問題は sRGB2014.icc とか適当に置いて埋め込んで Imagick の出力を PNG にすれば良い。

$image->profileImage('icc', $icc);

ちなみに GD の AVIF 品質は imageavif() の引数に渡すことで設定可能らしい。最高は 100 で、とりあえず 90 くらいとしておく。-1 だと GD のデフォルト値(30)になるらしい。

imageavif($data, null, 100, 10);

最速を指定しても重すぎて使い物にならない。WordPress だと遅延ローディングが効くからまだマシなんだけど、はてなに貼ってるやつはページを開いた時点で全部リクエスト飛んでるのでとてつもない重さになる。

結局 WebP も cwebp を自前でコンパイルしたものを置いてパイプかまして使っているのでそんなに速くないし、最高画質でも画質が悪いのでもう JPEG のままでいいや…となったわけでした。

ちゃんちゃん。(古い)




以上の内容はhttps://mattintosh-note.jp/entry/20250718/1752810182より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14