エックスサーバーでImageMagickを使う
WordPressで画像リサイズなどの処理を行おうとした時、画像処理エンジンとしてGDまたはImageMagickが使われる。優先度が高いのはImageMagick。
エックスサーバーではPHPからImageMagickを扱うための拡張モジュールImagickがインストールされていないため、デフォルトではGDを用いて処理が行われている。
しかし各種ブログ記事などを読むと、画像リサイズ時の画質はImageMagickの方が良いようだ。写真サイトを運営する者としては、ぜひImageMagickを導入してみたい!
試行錯誤の末、エックスサーバーにImageMagick(及び、PHP拡張モジュールImagick)をインストールし、WordPressでの画像処理にImageMagickを用いることができるようになったので手順を書いておきます。
準備1:現在使用されている画像処理エンジンの判定
はじめに、テンプレート内の適当なファイルにテストコードを書いて、現在使用されている画像処理エンジンを調べてみた。テストコードは下記ブログを参考にさせていただいた。
【参考】WordPressで利用される画像エンジン(ImageMagick/GD)について調べてみました
テストコードを実行した結果、WP_Image_Editor_GDの表記から、案の定、GDが動いていることがわかった。
object(WP_Image_Editor_GD)#0000 (7) {
...
準備2:作業用フォルダ作成
エックスサーバーにSSHでログインし、ホームディレクトリ直下に作業用フォルダを作成しておく。
[tomi@sv ~]$ cd [tomi@sv ~]$ mkdir temp [tomi@sv ~]$ cd temp
1:libpngをインストール
ImageMagickでPNG形式をサポートするために、libpngをインストールする。
※バージョンは記事執筆時の最新版なので、現在の最新版を確認した上で導入してください。
[tomi@sv temp]$ wget http://www.imagemagick.org/download/delegates/libpng-1.6.20.tar.gz [tomi@sv temp]$ tar zxvf libpng-1.6.20.tar.gz [tomi@sv temp]$ cd libpng-1.6.20 [tomi@sv libpng-1.6.20]$ ./configure --prefix=$HOME/local/ CFLAGS="-I$HOME/local/include" LDFLAGS="-L$HOME/local/lib" CPPFLAGS="-I$HOME/local/include" [tomi@sv libpng-1.6.20]$ make [tomi@sv libpng-1.6.20]$ make install [tomi@sv libpng-1.6.20]$ cd ..
2:JPEGライブラリをインストール
ImageMagickでJPEG形式をサポートするために、JPEGライブラリをインストールする。
※バージョンは記事執筆時の最新版なので、現在の最新版を確認した上で導入してください。
[tomi@sv temp]$ wget http://www.imagemagick.org/download/delegates/jpegsrc.v9a.tar.gz [tomi@sv temp]$ tar zxvf jpegsrc.v9a.tar.gz [tomi@sv temp]$ cd jpeg-9a [tomi@sv jpeg-9a]$ ./configure --prefix=$HOME/local/ CFLAGS="-I$HOME/local/include" LDFLAGS="-L$HOME/local/lib" CPPFLAGS="-I$HOME/local/include" [tomi@sv jpeg-9a]$ make [tomi@sv jpeg-9a]$ make install [tomi@sv jpeg-9a]$ cd ..
3:ImageMagickをインストール
いよいよImageMagick本体をインストール。
※バージョンは記事執筆時の最新版なので、現在の最新版を確認した上で導入してください。
[tomi@sv temp]$ wget http://www.imagemagick.org/download/ImageMagick.tar.gz [tomi@sv temp]$ tar zxvf ImageMagick-6.9.2-8.tar.gz [tomi@sv temp]$ cd ImageMagick-6.9.2-8 [tomi@sv ImageMagick-6.9.2-8]$ ./configure --prefix=$HOME/local/ CPPFLAGS="-I$HOME/local/include" LDFLAGS="-L$HOME/local/lib"
ここで躓いてしまった。./configureの結果を見ると、DELEGATESの欄にPNGが出てこない。
これではPNGファイルを扱うことができない(扱う予定ないけど)。
Options used to compile and link: ... DELEGATES = mpeg jpeg ps x xml zlib
原因を探るため、ログファイルconfig.logを確認してみた。
引数PKG_CONFIG_PATHにlibpng.pcの場所を指定してあげれば良さそうだ。
configure:30964: checking for PNG
configure:30971: $PKG_CONFIG --exists --print-errors "libpng >= 1.0.0"
Package libpng was not found in the pkg-config search path.
Perhaps you should add the directory containing `libpng.pc'
to the PKG_CONFIG_PATH environment variable
No package 'libpng' found
そこで、./configureに引数PKG_CONFIG_PATHを付けて再度実行。
[tomi@sv ImageMagick-6.9.2-8]$ ./configure --prefix=$HOME/local/ CFLAGS="-I$HOME/local/include" LDFLAGS="-L$HOME/local/lib" CPPFLAGS="-I$HOME/local/include" PKG_CONFIG_PATH="$HOME/local/lib/pkgconfig"
今度はちゃんとPNGが出てきた!
Options used to compile and link:
...
DELEGATES = mpeg jng jpeg png ps x xml zlib
引き続きインストール。
インストール後、改めてJPEGとPNGがサポートされていることを確認した。
[tomi@sv ImageMagick-6.9.2-8]$ make [tomi@sv ImageMagick-6.9.2-8]$ make install [tomi@sv ImageMagick-6.9.2-8]$ ~/local/bin/convert --version Version: ImageMagick 6.9.2-8 Q16 x86_64 2015-12-13 ... Delegates (built-in): jng jpeg png x xml zlib [tomi@sv ImageMagick-6.9.2-8]$ cd ..
4:Imagickをインストール
続いてPHPからImageMagickを扱うための拡張モジュールImagickをインストールする。
※バージョンは記事執筆時の最新版なので、現在の最新版を確認した上で導入してください。
./configureで--with-imagickオプションにImageMagickの場所を、--with-php-configオプションに使用するバージョンのphp-configの場所を指定してあげないと、途中でエラー吐いて止まります。
[tomi@sv temp]$ wget https://pecl.php.net/get/imagick-3.3.0.tgz
[tomi@sv temp]$ tar xvzf imagick-3.3.0.tgz
[tomi@sv temp]$ cd imagick-3.3.0
[tomi@sv imagick-3.3.0]$ /opt/php-5.6.15/bin/phpize
[tomi@sv imagick-3.3.0]$ ./configure --with-imagick=$HOME/local --with-php-config=/opt/php-5.6.15/bin/php-config
[tomi@sv imagick-3.3.0]$ make
[tomi@sv imagick-3.3.0]$ cd modules
[tomi@sv modules]$ cp ./imagick.so ~/local/lib/
最後に、php.iniにimagick.soへのパスを追記するのを忘れずに。
[imagick] extension = /home/tomi/local/lib/imagick.so
これでインストールは完了。
再度テストコードを実行すると、ImageMagickが使われていることを確認できた!
object(WP_Image_Editor_Imagick)#0000 (7) {
...
インストール完了後、必要でなければtempディレクトリは削除してしまって構いません。
非常に参考になりました。
ただ、ImageMagick を make installしたときに下記の環境では警告が表示されました。
・環境
libpng-1.6.29.tar.gz , jpegsrc.v9a.tar.gz , ImageMagick-7.0.5-4.tar.gz , imagick-3.4.3.tgz
・警告
coders/png.c: 関数 ‘WriteOnePNGImage’ 内:
coders/png.c:8358:5: 警告: 変数 ‘ping_exclude_eXIf’ が設定されましたが使用されていません [-Wunused-but-set-variable]
ping_exclude_eXIf,
^
coders/png.c:8348:5: 警告: 変数 ‘ping_have_eXIf’ が設定されましたが使用されていません [-Wunused-but-set-variable]
ping_have_eXIf,
>さのけんさん
コメントありがとうございます。参考にしていただけて幸いです。
また、ご報告ありがとうございます。"警告"については、特に問題ないので無視していただいて結構と思います。