注目キーワード
  1. 技術
  2. 広告
  3. IDFA
  4. PHP
  5. WordPress

リクエストごとに、画像(png/gif/jpg)をwebpフォーマットに切り替える

  • 2020年9月13日
  • 2020年9月16日
  • 技術
  • 0件

webpをご存知でしょうか。webpは、Googleが開発した新しい画像フォーマットになります。軽量で画質も担保されているフォーマットになっており、今秋、AppleのiOS14からSafariでも正式サポート予定です。Safariでも導入されるとなると、今後活用が進むと思うので、本記事でも紹介していきたいと思います。

webpとは

軽量で画質も担保されているので、今利用しているjpg, png, gifからwebpに変換するだけでもかなりの効果を得ることができます。大きな特徴としては、非可逆圧縮でもアルファチャンネルを扱えることが挙げられます。これまで、gifやpngのように、透過した画像を作ったとしても、webpで書き出すことが可能になります。今秋に、Safariで対応予定になっていますが、サポートブラウザについては、下記をご確認ください。

https://caniuse.com/?search=webp
本日時点では、Safari、IEが未対応です。ただ、Safariは対応される予定のため、実質、IEだけが使えない画像フォーマットになっています。

前提

画像サーバには、大元の画像(gif, png, jpgなど)が格納されており、新しくwebpフォーマットの画像も格納されていることを前提に記載しています、

例)
img/sample.png
img/sample.webp

リクエストごとに、画像(png/gif/jpg)をwebpフォーマットに切り替える

今回は、2つのパターンで確認したいと思います。

パターン1: htaccess で切り分ける

まずは、htaccess で切り分けるケースです。webサーバは、apacheを使っていることを前提に考えてみます。イメージとしては、アクセスがあったタイミングで、webサーバ側で、rewriteするようにします。そのため、下記の流れで処理を進めます。

+++++++++++++
・ページにアクセス

・htaccessで、下記条件に当てはまっていた場合、画像フォーマットをwebpに差し替え
requestヘッダー情報に、webpが含まれている
+++++++++++++

.htaccess

<IfModule mod_rewrite.c>
  # Rewriteモジュールを有効にする
  RewriteEngine On

  # Acceptリクエストヘッダが、image/webpを含む場合、RewriteRuleを適用する
  RewriteCond %{HTTP_ACCEPT} image/webp

  # webpフォーマットのファイルがあるか確認する
  RewriteCond %{DOCUMENT_ROOT}/$1.webp -f

  # jpg, png, gifファイルを、webpファイルにrewriteする
  RewriteRule (.+)\.(jpe?g|png|gif)$ $1.webp [T=image/webp,E=accept:1]
</IfModule>

<IfModule mod_mime.c>
  # 拡張子.webpファイルはContent-Typeとしてimage/webpを返す
  AddType image/webp .webp
</IfModule>

上記のように設定することで、画像(png/gif/jpg)をwebpフォーマットに切り替えることができます。これならアプリケーションを触らなくても、対応ができます。簡単ですね。

パターン2: アプリケーションの処理の中で切り分ける

2つ目は、アプリケーションの処理の中で切り分ける方法です。今回は、phpで検証してみます。下記にサンプルコードを記載しました。

<?php
$httpAccept = $_SERVER['HTTP_ACCEPT'];
$imgName = 'sample.png';

if (xxxxxxxxxx) { // 条件が必要な場合、入れてください
    $imgName = str_replace(['.png', '.gif', '.jpg'], '.webp', $imgName);    
}
echo $imgName;
?>

上記のように実装することができます。アプリケーションの中で切り分ける場合、条件を入れることができるので、ここはうまく使いましょう。例えば、サービスで使っているIDやユーザで切り分けたい場合などが想定できます。

まとめ

webpフォーマットは、今後導入が進んでくると思いますので、サービス要件に合った実装を進めていきましょう!