MavericksにImageMagick(Cactuslab製インストーラ) + PerlMagickを入れる


ImageMagick は、スタンダードな画像処理ライブラリ＆ユーティリティです。Image::Magick というラッパーモジュール (PerlMagick はその別名です) を使って Perl からも画像処理を行うことができます。ここでは、OS X 10.9.4 にセットアップした際の手順をメモします。

##Cactuslab 製インストーラの入手

ImageMagick のインストール方法には直コンパイル、MacPorts や Homebrew などいろいろあります。その中で今回は、[Cactuslab](http://cactuslab.com) というデベロッパー集団の作成してくれたインストーラ(pkg ファイル)を扱います。

pkg を用いる利点を一応述べておくと、

- GUI インストーラによるキーボード打鍵数節約
- バイナリなのでコンパイルの苦労＆時間節約

などがあるでしょう。

さて、目的の pkg ファイルは http://cactuslab.com/imagemagick/ からダウンロードできます。3点のパッケージへのリンクが並んでいると思いますが、[Requires XQuartz] のついていないもので大丈夫です。

![スクリーンショット 2014-07-17 11.06.48 AM.png](https://qiita-image-store.s3.amazonaws.com/0/7871/0c558371-bd78-97f2-416a-e69dfe598cbc.png "スクリーンショット 2014-07-17 11.06.48 AM.png")


### パスを通す & 動作確認
パッケージよりインストールを行った場合、/opt/X11/bin と /opt/ImageMagick/bin に既にパスが通っているはずです。

```bash:bash
  $ which convert
```

として確認してみてください。

動作を確認するために、まず、適当なJPEG画像 hoge.jpg を用意します。hoge.jpg のあるディレクトリにおいて、

```bash:bash
  $ convert hoge.jpg hoge.png
```
として、hoge.png が生成されることを確認します。
##PerlMagick のインストール
###CPAN からダウンロード
#### 1. バージョンの適合する tarball を入手
たとえば ImageMagick 本体のバージョンが 6.87 であれば、

```bash:bash
  $ wget http://search.cpan.org/CPAN/authors/id/J/JC/JCRISTY/PerlMagick-6.87.tar.gz
```

などとして、 **同じバージョン用の**モジュールのソースを入手します。

#### 2. ImageMagick 系ライブラリ, libperl の配置の確認
ImageMagick のヘッダのあるインクルードディレクトリとライブラリのディレクトリを後で　Makefile.PL 内で設定します。
Cactuslab の pkg の場合、ImageMagick 及びそのライブラリは /opt/ImageMagick 以下にインストールされています。それを確認するために

```bash:bash
  $ ls /opt/ImageMagick/include/ImageMagick-6
  $ ls /opt/ImageMagick/lib
```

としてみます。ImageMagick のバージョンが6系であれば、上記がそれぞれインクルードパスとライブラリパスになります。

また、libperl も正しく呼び出せなければならないようです（参考：[id:rin1024さん](http://d.hatena.ne.jp/rin1024/20110518/1305711363)）。以下のようにして確認した libperl を含んでいるディレクトリのパスを、後で Makefile.PL を編集してインクルードパスとライブラリパスの両方に追加します。

```bash:bash
  $ locate libperl
```

#### 3. インストール先決定 (@INC の確認)
モジュールの外部からのインストール先をユーザディレクトリ以下（例として、~/.local/lib/Perl5/）にしている場合は、~/.bashrc 等に次のように記述しておきます。（シェルが異なる場合は適宜読み替えてください）

```bash:.bashrc
  export PERL5LIB=/Users/username/.local/lib/
```

このとき 'Perl5' が INSTALL_BASE 以下、モジュールの入るパスとなり、/Users/username/.local/lib を INSTALL_BASE として指定することとなります。

```bash:bash
$ perl -e "print join ',', @INC"
```

とすると現在の Perl のモジュール検索パスを確認できます。

#### 4. Makefile.PL を編集する
```bash:bash
  $ vim Makefile.PL
```

165 行目付近、

```perl:Makefile.PL(before)
  my $INC_magick = " ... ";
  my $LIBS_magick = " ... "; 
```

となっている箇所はそれぞれインクルードパスとライブラリパスを指定する変数です。

インクルードパスは -I/path/to/include/ImageMagick-x
ライブラリパスは -L/path/to/lib
の形で、それぞれの変数の値の文字列の先頭部に、スペースを挟んで追加してください。また、locate libperl で確認したパスを **両方に**追加します。

```perl:Makefile.PL(after)
  my $INC_magick = "-I/opt/ImageMagick/include/ImageMagick-6/ -I/System/Library/Perl/5.16/darwin-thread-multi-2level/CORE ... ";
  my $LIBS_magick = "-L/opt/ImageMagick/lib -L/System/Library/Perl/5.16/darwin-thread-multi-2level/CORE ... "; 
```

#### 5. INSTALL_BASE を指定してビルド
configure-make-make install です。モジュールのインストール先として、通常は PREFIX を指定することになるのですが、私の環境では、

```bash:bash
  $ perl Makefile.PL PREFIX=/Users/username/.local
  Only one of INSTALL_BASE or INSTALL_BASE can be given.  Not both.
```

と怒られてしまいました。PREFIX を INSTALL_BASE に変えて

```bash:bash
  $ perl Makefile.PL INSTALL_BASE=/Users/username/.local
```

と指定すると成功します。あとは

```bash:bash
  $ make && make install
```

でビルド＆インストールが完了します。

### 動作確認

```bash:bash
  $ perl -MImage::Magick -e ""
```

上記のコマンドが通ればモジュールファイルそのものは組み込めています。[くろひつじさんのメモ帳](http://memo.ark-under.net/memo/471)などのコードを参考にして動作確認してみましょう。


##参考
- [ImageMagick installer for Mac OS X](http://cactuslab.com/imagemagick/)
- [HomebrewでImageMagickを入れた後にPerlMagickを入れる - uncertain world](http://d.hatena.ne.jp/rin1024/20110518/1305711363)
- [Perl::ImageMagickでよく使うコマンドとサンプル | くろひつじのメモ帳](http://memo.ark-under.net/memo/471)