RAILSIDE WORKS

エックスサーバーで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ディレクトリは削除してしまって構いません。

Comments

  • 非常に参考になりました。
    ただ、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,

    名前:さのけん 投稿日:2017/04/12(水) 16:47:27 返信
    • >さのけんさん
      コメントありがとうございます。参考にしていただけて幸いです。
      また、ご報告ありがとうございます。"警告"については、特に問題ないので無視していただいて結構と思います。

      名前:tomi103 投稿日:2017/04/17(月) 22:44:27

Trackback URL

Leave a Comment

さのけんさんの投稿に返信 キャンセル

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください