どういうことだってばよ。
フィギュアレビューで有名な Asahiwa さんの記事で AVIF の話が出てたので「そういえばシンレンタルサーバー(XServer)って AVIF 対応してくれたのかな…」と思って確認してみたけど相変わらず Imagick のサポートフォーマットに入っていなかった。
が、php8.3 -i を見てみたらなんと GD が AVIF に対応していた。
うちのブログは恐らく頭のおかしい部類で画像リクエストはすべてリアルタイムで加工して返却している。次の画像の右上にはきっとあなたの IP アドレスが表示されているはず。
それもこれも無断転載する輩がいるからで画像リクエストすべてをスクリプトに通してこのような情報を埋め込んでいるわけなんだけども(あと JPEG と WebP のファイル両方管理するのが面倒くさい)。前々から WebP の画質の汚さが気になって気になって仕方がなかった。もっと綺麗な画質で上げてあるんだけどなぁ…と常々思っていたのでさっそくスクリプトを書き換え。
Imagick から GD に画像を渡して AVIF を出力することは出来たんだけど色々と問題が出てきた。
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 のままでいいや…となったわけでした。
ちゃんちゃん。(古い)
