2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ロリポップで画像をWebPに変換したい

Last updated at Posted at 2020-04-12

2020/4/27にWebPが公式にサポートされました:tada:1よって、今となっては以下にあるような面倒なことをする必要はなくなりました。


ロリポップのレンタルサーバーで、JPEGやPNGの画像をWebP形式に変換したくてなんとかした話です。スタンダードプラン以上(SSH接続ができる)を前提としています。

ロリポップのPHPはimagewebp関数をサポートしていない

WebP変換?imagewebp関数使えば楽勝でしょ:thumbsup:と思っていたら...

Fatal error: Uncaught Error: Call to undefined function imagewebp()

で動きませんでした。phpinfo()で確認すると
lolipop-phpinfo-gd.png
ロリポップはWebPをサポートしていないことが分かりました。2

自前でWebPに変換できる環境を構築する

cwebpコマンドラインツールを利用することで、画像をWebP形式に変換することができます(A new image format for the Web | WebP | Google Developers)。つまり、cwebpをロリポップのサーバーで利用できるようにすれば解決です。

方針

ロリポップと同様の環境でビルドしたcwebpコマンドラインツールと必要なライブラリをロリポップのサーバーにコピーします。ロリポップのレンタルサーバーではmakeはおろかgccも利用できない(使用可能コマンド一覧 - ロリポップ)ため、レンタルサーバー上でビルドするのは不可能です。

ビルド環境の構築

ロリポップのレンタルサーバーと同様の環境をVirtualBoxで構築します。ポイントは**glibcのバージョンを合わせる**ことです。3

ロリポップサーバーのglibcのバージョンを確認

レンタルサーバーで

/lib64/libc.so*

を実行すると、

GNU C Library stable release version 2.12, by Roland McGrath et al.

のようにバージョンが表示されます(私の環境では2.12でした)。

CentOS 6のインストール

glibcのバージョンが2.12であるCentOS 6(64bit)環境をVirtualBoxで構築します。レンタルサーバーがCentOSである5ためOSもそれに合わせます。

VirtualBoxでの環境構築の方法はここでは詳述しません。かなりざっくりと説明すると

  1. VirtualBoxのインストール
  2. Download - CentOSのx86_64のリンクからCentOS 6.10(64bit)をダウンロード(
    aria2を使うと高速にダウンロードできるのでおすすめです6。)
  3. ダウンロードしたISOでCentOSをインストール

という流れです。私はGUIなしでSSHを有効にして利用しました。

cwebpのビルド

VirtualBoxのCentOSでビルドを行います。だいたいのことはCompiling the Utilities | WebP | Google Developersに書いてあります。

必要なパッケージのインストール

これがないとビルドしても入力画像が読み込めません。

sudo yum install libjpeg-devel libpng-devel

ソースのダウンロード・展開

libwebp-1.0.3.tar.gzdownloads listからダウンロードして下記で展開

tar xvzf libwebp-1.0.3.tar.gz

ビルド

後でレンタルサーバーにアップロードする際の手間を考慮し、ホームディレクトリ(~/bin/libwebp-1.0.3)にインストールします。

cd libwebp-1.0.3
./configure --prefix=$HOME/bin/libwebp-1.0.3
make
make install

ロリポップサーバーで実行できるようにする

必要なファイルのコピー

下記のファイルをレンタルサーバーのホームディレクトリにコピーします。

ローカル(VirtualBox) レンタルサーバー
~/bin/libwebp-1.0.3/bin/cwebp ~/usr/bin/cwebp
~/bin/libwebp-1.0.3/lib/libwebp.so.7.1.0 ~/usr/lib/libwebp.so.7.1.0
~/bin/libwebp-1.0.3/lib/libwebpdemux.so.2.0.6 ~/usr/lib/libwebpdemux.so.2.0.6

シンボリックリンクの作成

ライブラリのシンボリックリンクを作成します。

cd ~/usr/lib
ln -s libwebp.so.7.1.0 libwebp.so.7
ln -s libwebpdemux.so.2.0.6 libwebpdemux.so.2

環境変数の設定

cwebpと、それが利用するライブラリを見つけられるようにパスを通します。

cd ~
vi .bash_profile

Insertキーで挿入モードに入り、下記の内容を追加します。

~/.bash_profile
export PATH=~/usr/bin:$PATH
export LD_LIBRARY_PATH=~/usr/lib:$LD_LIBRARY_PATH

編集後、Escキーでコマンドモードに入り:wqで保存して終了します。下記コマンドで.bash_profileを再読み込みすることでパスが通った状態になります。今後は、SSHでログインすれば自動的にパスが通ります。

source ~/.bash_profile

試しにcwebpを実行して下記のような表示になっていればOKです。

Usage:

   cwebp [options] -q quality input.png -o output.webp

where quality is between 0 (poor) to 100 (very good).
Typical value is around 80.

Try -longhelp for an exhaustive list of advanced options.

もしライブラリが見つからない旨のエラーが出た場合は、ローカル環境の~/bin/libwebp-1.0.3/lib/を参考にしてレンタルサーバーにライブラリをコピーすればよいでしょう。

PHPからの利用

PHPから利用する場合も、~/.bash_profileと同様に環境変数をセットする必要があることに注意してください。環境変数は~/bin/...ではなく、ルートからの絶対パス(/home/users/...のようなパス、pwdコマンドで確認できます)で指定します。

  1. PHP7.3において、サイトの高速化に効果のある「WebP」形式の画像ファイルに対応しました! - ロリポップ

  2. サポートに問い合わせてみたところ、現時点(2019.03.26)でWebP対応の予定はないとのお返事でした。今後に期待したいところです。

  3. 試しにPrecompiled WebP utilitiesをダウンロードしてロリポップサーバーで動かすと、cwebp: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by cwebp)となって動かないことが分かります。4

  4. レンタルサーバーでglibcのバージョンを変えれば...と思う人もいるかもしれませんが、多くのプログラムがglibcに依存しているため不可能です。無理にやるとあらゆるコマンドが無効になり詰みかけます(参考: [Solved] relocation error: /lib64/libc.so.6: symbol _dl_starting_up 解決法 - Qiita)。

  5. サーバーの仕様 - ロリポップ

  6. 参考: curlやwgetの数倍速い 爆速ダウンローダー aria2を使う - Qiita

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?