スマホ向けに、画像のクオリティを落とさずファイルサイズを小さくするためpegtranを使ってはみたものの、そこまで劇的に小さくならない。
そこでjavaなwebサービスでwebpを導入するための仕組みを検証したのでメモ(ただサービスには利用していない)
javaで画像をwebpへエンコードするには以下を利用。ImageIOで扱える拡張子に"webp"が増える。
https://bitbucket.org/luciad/webp-imageio
ただ社内標準がjdk1.5なので辛い。ステージングにjdk1.7を入れてtomcatで参照するように変更。
webpへの対応はリクエストヘッダから判別し、対応している場合リライトを行いwebpの配信を行う。
画像のエンコードは、ファイルが存在しない場合のみtomcatで実行し、二度目以降は作成済みのファイルをapacheで配信する。
vertualhost.conf
DocumentRoot /var/www/xxx/htdocs
RewriteEngine On
# webp non support
RewriteCond %{HTTP_ACCEPT} !\bimage/webp\b
RewriteRule (.*) $1 [L]
# webp support
## check webp file exist
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-f
RewriteRule ^/(.*)$ balancer://xxx/servlet/webpImage%{REQUEST_URI}?ts=%{ENV:X_QUERY_TS} [P,QSA]