ImageMagick & GD

Back

前フリ
 前から自家サーバーのCGIで自動サムネイル作成をさせたかったので、画像処理ライブラリのGD(2.0.15)とperlからのインターフェースとな るGD.pm(2.06)、ImageMagick(PerlMagick)を入れてみた。

 (2005/12/28加筆)
 GDの説明に誤りがあったので修正。現在はImageMagickを使用中でGDの現状は不明。


 とりあえず、双方に必要なライブラリ群をインストール。

zlib (なければ)インストール】
 ソースを展開してmake install。

% ./configure --shared
% make
# make instal
l


libpngイ ンストール】
 ソースを展開。macosx用のmakefileパッチを落としてきてmakefileとしてコピー。

% make


 ここでmake installするとなぜかインストーラーがインストールするべきコピー元ファイルを消してしまって途中でとまる。よくわからないがとりあえず makefileの

-@/bin/rm -f libpng.3.$(SHAREDLIB_POSTFIX)
-@/bin/rm -f libpng.3.$(PNGMIN)*.$(SHAREDLIB_POSTFIX)


 の部分をコメントにしてから

# make install

libjpegインストール】
 ソースを展開。
 libtoolがない、とか怒られる場合はImageMagickのソースに入ってる分なりなんなりを拝借してカレントにコピー。

% ./configure --enable-shared
% make
# make install


【libtiffインストール】
 OS-X用のビルドオプションがあるのでconfigureのヘルプをよく見て、./configure ; make install。


GDインストール
 普通に入るので省略。

 で、肝心の動き具合であるが、ライブラリの規模自体が小さいからか処理が軽いのが好印象。しかし、縮小したときの画質がかなり悪い。そして、つ いでながらGIFが扱えない(現時点でどうなってるか不明)。

 ※画質は
print NEW $newImage->jpeg(75);
 で指定できるようです(未検証)。


こ んな感じ(デフォルト画質)

 GDでサムネイル縮小する場合のperlのソースはこんな感じ。あくまで感じ。

use GD;
open OLD, "oldpic.jpg";
$oldImage=newFromJpeg GD::Image(¥*OLD);
@bound=$oldImage->getBounds();
$newImage=new GD::Image( 90, 70 );
$newImage->copyResized( $oldImage, 0, 0, 0, 0, 90, 70, $bound[0], $bound[1] );
open NEW, ">newpic.jpg";
binmode NEW;
print NEW $newImage->jpeg;
close OLD;
close NEW;



ImageMagickインストール
 まず本体をコンパイル。

% ./configure --without-x --without-xml --without-magick-plus-plus --without-perl --enable-shared
% make
# make install


 肝のPerlmagickをビルドする。

% cd perlmagick
% perl Makefile.PL
# make install

 動作の感じはGDに比べると少々重いっぽい。が、やはり高機能(demo参照)、で数段上な感じ。ソース もGDよりすっきり書けるもよう。GIFもなぜかオッケー。

こんな感じ(quality 70)

 perlでのソースはこんな感じ。

use Image::Magick;
$model=Image::Magick->new( );
$model->ReadImage( "oldpic.jpg" );
$model->ScaleImage( width=>90 ,height=>70 );
$model->Set(quality=>70);
$model->Write("newpic.jpg");



補足
 ライブラリ参照先が変わってしまうようなperlの再コンパイルを行ったときは、PerlMagickもコンパイルし直さないといけないようである。


2003 9/21 updated / C's gallery OS X Tips