# WebP変換と配信の流れ

次のロジックでWebPへの自動変換とブラウザに応じた適切な配信を実現します。

  1. .htaccessによるWebP対応判定
  2. 変換済みキャッシュの確認
  3. WebP変換
  4. キャッシュの保存

# WebPの対応判定

ブラウザからのリクエストヘッダAcceptを元にWebPの対応可否を判定します。

RewriteEngine On
RewriteCond %{HTTP_ACCEPT} image/webp
RewriteRule \.(jpe?g|png|gif) /phpwebp/image.php [L]

WebP非対応ブラウザの場合は、従来どおり元データを静的ファイルとして配信しますが、WebP対応ブラウザに対しては/phpwebp/image.phpでWebPへの変換処理を行います。

# キャッシュの確認

phpwebp/image.phpはまず、WebP変換後のキャッシュファイルを確認します。

  1. キャッシュファイルが存在するか。
  2. キャッシュファイルが存在する場合はその作成後に元の画像が変更されていないか。

以上の条件を満たす場合は、キャッシュの内容を配信して処理を終了します。

# WebPへの変換

キャッシュがまだ存在しないか、キャッシュ作成後に元のファイルが更新された場合は、WebPへの変換を実行します。

  • JPEGまたはPNGファイル cwebpコマンドで変換
  • GIFファイル gif2webpコマンドで変換

変換した結果のWebPファイルをキャッシュに保存しつつ、ブラウザに配信します。

# WebP変換に失敗した場合

変換に失敗した場合や、WebPに変換することで元画像よりファイルサイズが大きくなってしまった場合はWebP変換を断念し、WebP対応ブラウザに対しても元画像を配信します。

  • WebPはRGBカラースペースにのみ対応しているため、CMYKカラースペースの画像からは変換できません。
  • アニメーションGIFからWebPへの変換において、ファイルによって逆にファイルサイズが大きくなるケースがあります。