SVG → PNG/WebP の品質は、
rsvg-convert + cwebp の組み合わせが最強。
SVG → PNG(rsvg-convert)
PNG → WebP(cwebp)
GIF / JPEG / PNG / WebP → WebP の品質は、
cwebp + gif2webp の組み合わせが最強。
🌟 cwebp は何をするツールなのか
✔ 入力:PNG / JPEG / TIFF / BMP / PPM / WebP(再圧縮)
✔ 出力:WebP(lossy または lossless)
GIF と WebP 変換の正しい整理
1. アニメーション GIF
フレームを複数持つ
→ gif2webp が必須
cwebp はアニメーションを扱えない
フレーム保持・最適化・ループ情報などを正しく処理できるのは gif2webp
2. 静止画 GIF(1フレーム)
実体は「256色の PNG に近い静止画像」
→ cwebp で完全に変換可能
透明度もそのまま扱える
画質も PNG と同じ扱いで良い
判定
● GIF のフレーム数をチェック
$img = new Imagick($input);
if ($img->getNumberImages() > 1) {
$isAnimatedGif = true;
}
または、
$cmd = sprintf('identify -format "%%n" %s', escapeshellarg($tmpImg));
$frames = (int) trim(shell_exec($cmd));
但し、cwebp が GIF をサポートしている必要がある。
GIF デコーダを含まないビルドであるならば、最適な変換フローは、
JPEG / PNG / WebP → cwebp
静止 GIF → PNG(Imagick)→ WebP(cwebp)
アニメ GIF → gif2webp
また、cwebpでリサイズはできるが、gif2webpではリサイズはできない。アニメgifのリサイズ+WebPへの変換は ffmpeg が使える。