ImageMagic(PerlMagic) For Windows
 
TryThe Homepage
初めてのCGI
CGI 研究室
ダイナミックCGI
ダウンロード
サービス
サーバ構築(Windows)
データベースアクセス
有料サービス
FAQ
お問い合わせ
このページを印刷
ImageMagic(PerlMagic)
このコーナーは、ホームサーバ、自社サーバならではのグラフィックライブラリ、ImageMagickのインストールと、利用法をご紹介します。 On The Flyでは不可能なJPEGやPNG形式の画像を動的に作成、編集することができ、 アップロードされた画像をすべてJPEG形式のサムネイルでコピーする事も可能にします。 ImageMagickを使用すれば

こんなグラフも動的に作成できてしまいます。

本章ではWindowsのホームサーバを構築する事を目的としていますのでWindowsのインストールを解説します。 と言ってもWindowsの場合は、解説するまでもありません。5分もあれば終わってしまいます。

ImageMagicを使用した高度なサンプルはこちらに有ります。

※ImageMagickはPerlを拡張する必要がありますので、プロバイダや、レンタルサーバにご自分でインストールすることはできません。
  ImageMagickのインストール
  • Command.comの起動
    [スタート]メニューの「ファイル名を指定して実行」で、
    command
    とタイプしてDOSシェルを起動します。
    C:\> ppm
    PPM interractive shell (2.2.0) - type 'help' for available command
    PPM> search magick
    PPM> install Image-Magic
    Install package 'Image-Magic?' (y/N): y
    ppm とタイプして、PPM コマンドを起動します。
    search magick で検索し、Image-Magick が表示されれば、
    install Image-Magick でインストールしてください。

    これでインストールは完了です。
    あとは実際にインターフェースを作成してアクセスするだけです。
  ImageMagickを使ってみる
インストールが終了すれば、perlからライブラリを操作して動的に画像を生成したり、編集できます。 ここで紹介するスクリプトは、Windowsに限らず、ImageMagickがインストールされたWebサーバであれば、 UNIXでもLinuxでも動作します。 次のサンプル画像は、450×356ピクセル、107KBのGIF画像です。
  • サムネイルされた画像を生成
    サンプル画像を出来るだけ解像度を落とさずにそのまま縮小しています。 ファイル形式はGIFのままですが、On The Flyと比べても非常に奇麗に生成されます。
    #!/usr/local/bin/perl

    # Transformは、同じ比率で画像を縮小拡大する
    # 新しい幅だけ指定する
    use Image::Magick;

    $newwidth = 120;

    $i = Image::Magick->new;
    $i->Read('Skyline.gif');
    $i = $i->Transform(geometry=>$newwidth);
    print "Content-type: image/gif\n\n";
    binmode(STDOUT);
    $i->Write("gif:-");
    exit;
    このサンプルで生成されたGIF画像は約14KBです。

  • jpegに変換して生成
    上記スクリプトとほとんど同じですが、ファイルに書き出す$i->Write('jpeg:-');の行だけが違っています。 jpegを指定する事で出力時にフォーマットを変換しています。
    #!/usr/local/bin/perl

    # Transformは、同じ比率で画像を縮小拡大する
    # 新しい幅だけ指定する
    use Image::Magick;

    $newwidth = 120;

    $i = Image::Magick->new;
    $i->Read('Skyline.gif');
    $i = $i->Transform(geometry=>$newwidth);
    print "Content-type: image/gif\n\n";
    binmode(STDOUT);
    $i->Write("jpeg:-");
    exit;
    ここで生成されたjpeg画像はわずか4KBしか有りません。 また、著作権にうるさいGIFをJPEGに変換して、さらにサイズまで1/3にしてくれるのですからGIFは使いづらくなります。 同様に「PNG:」を指定するとPNG形式に変換する事もできます。
  • 幅と高さを指定
    次の例では縦横比を無視し、指定した大きさで生成しています。 複数の画像を合成してサムネイルされた1枚の画像を生成する場合などに有効です。
    #!/usr/local/bin/perl

    # Scaleは、縦横のピクセルを与え縮小拡大する
    use Image::Magick;

    $newwidth = 160;
    $newheight = 160;

    $i = Image::Magick->new;
    $i->Read('Skyline.gif');
    $i->Scale(geometry=>geometry,width=>$newwidth,height=>$newheight);
    print "Content-type: image/gif\n\n";
    binmode(STDOUT);
    $i->Write("jpeg:-");
    exit;

  • 画像をぼかす
    ここからは、さまざまなフィルターや効果を紹介します。 Blurは、指定したfactor値(0-99.9)で画像をぼかします。
    $i->Blur(factor=>5);
    #!/usr/local/bin/perl

    use Image::Magick;

    $infile = "transform.jpg";

    $i = Image::Magick->new;
    $i->Read($infile);
    $i->Blur(factor=>5);
    print "Content-type: image/gif\n\n";
    binmode(STDOUT);
    $i->Write("jpeg:-");
    exit;

  • 木炭画の効果
    $i->Charcoal(factor=>3);
    #!/usr/local/bin/perl

    use Image::Magick;

    $infile = "transform.jpg";

    $i = Image::Magick->new;
    $i->Read($infile);
    $i->Charcoal(factor=>3);
    print "Content-type: image/gif\n\n";
    binmode(STDOUT);
    $i->Write("jpeg:-");
    exit;

  • エッジの抽出
    $i->Edge(factor=>0.1);
    #!/usr/local/bin/perl

    use Image::Magick;

    $newwidth = 120;
    $infile = "transform.jpg";

    $i = Image::Magick->new;
    $i->Read($infile);
    $i->Edge(factor=>0.1);
    print "Content-type: image/gif\n\n";
    binmode(STDOUT);
    $i->Write("jpeg:-");
    exit;

  • 浮き彫り効果
    $i->Emboss();
    #!/usr/local/bin/perl

    use Image::Magick;

    $newwidth = 120;
    $infile = "transform.jpg";

    $i = Image::Magick->new;
    $i->Read($infile);
    $i->Emboss();
    print "Content-type: image/gif\n\n";
    binmode(STDOUT);
    $i->Write("jpeg:-");
    exit;

  • 上下反転
    $i->Flip();
    #!/usr/local/bin/perl

    use Image::Magick;

    $newwidth = 120;
    $infile = "transform.jpg";

    $i = Image::Magick->new;
    $i->Read($infile);
    $i->Flip();
    print "Content-type: image/gif\n\n";
    binmode(STDOUT);
    $i->Write("jpeg:-");
    exit;

  • 左右反転
    $i->Flop();
    #!/usr/local/bin/perl

    use Image::Magick;

    $infile = "transform.jpg";

    $i = Image::Magick->new;
    $i->Read($infile);
    $i->Flop();
    print "Content-type: image/gif\n\n";
    binmode(STDOUT);
    $i->Write("jpeg:-");
    exit;

  • 枠の追加
    Width、heightは、枠の幅と高さで、innerとouterは、立体表示させる幅と高さをピクセルで指定します。
    $i->Frame(geometry=>geometry, width=>6, height=>6, inner=>2, outer=>2, color=>'#50FF50');
    #!/usr/local/bin/perl

    use Image::Magick;

    $infile = "transform.jpg";

    $i = Image::Magick->new;
    $i->Read($infile);
    $i->Frame(geometry=>geometry,width=>6,height=>6,inner=>2,outer=>2,color=>'#50FF50');
    print "Content-type: image/gif\n\n";
    binmode(STDOUT);
    $i->Write("jpeg:-");
    exit;

  • ねじり効果
    factorには、ねじり強度を%で指定します。
    $i->Implode(factor=>'40%');
    #!/usr/local/bin/perl

    use Image::Magick;

    $newwidth = 120;
    $infile = "transform.jpg";

    $i = Image::Magick->new;
    $i->Read($infile);
    $i->Implode(factor=>'40%');
    print "Content-type: image/gif\n\n";
    binmode(STDOUT);
    $i->Write("jpeg:-");
    exit;

  • 色反転
    $i->Negate()で全ての色を反転し、オプションでグレイスケールだけを反転させる事もできます。
    $i->Negate(gray=>1);
    #!/usr/local/bin/perl

    use Image::Magick;

    $newwidth = 120;
    $infile = "transform.jpg";

    $i = Image::Magick->new;
    $i->Read($infile);
    $i->Negate();
    print "Content-type: image/gif\n\n";
    binmode(STDOUT);
    $i->Write("jpeg:-");
    exit;

  • 画像の回転
    degreesで指定された角度で画像を回転します。degreesは、-360から360までの整数で、マイナスは左回りを指します。 cropに1を指定すると、元の画像の大きさを変えません。 sharpenに1を指定すると、同時にシャープフィルタを付加します。
    $i->Rotate(degrees=>-30,crop=>0,sharpen=>1);
    #!/usr/local/bin/perl

    use Image::Magick;

    $infile = "transform.jpg";

    $i = Image::Magick->new;
    $i->Read($infile);
    $i->Set(bordercolor=>'#FFFFFF');
    $i->Rotate(degrees=>-30,crop=>0,sharpen=>1);
    $i->Trim();
    print "Content-type: image/gif\n\n";
    binmode(STDOUT);
    $i->Write("jpeg:-");
    exit;

  • 影を付ける
    画像に影を付けます。
    $i->Shade(geometry=>geometry,azimuth=>50,elevation=>50,color=>0);
    #!/usr/local/bin/perl

    use Image::Magick;

    $infile = "transform.jpg";

    $i = Image::Magick->new;
    $i->Read($infile);
    $i->Shade(geometry=>geometry,azimuth=>50,elevation=>50,color=>0);
    print "Content-type: image/gif\n\n";
    binmode(STDOUT);
    $i->Write("jpeg:-");
    exit;

  • シャープ効果
    $i->Sharpen(factor=>70);
    #!/usr/local/bin/perl

    use Image::Magick;

    $infile = "transform.jpg";

    $i = Image::Magick->new;
    $i->Read($infile);
    $i->Sharpen(factor=>70);
    print "Content-type: image/gif\n\n";
    binmode(STDOUT);
    $i->Write("jpeg:-");
    exit;

  • ソラリゼーション効果
    $i->Solarize(factor=>70);
    #!/usr/local/bin/perl

    use Image::Magick;

    $infile = "transform.jpg";

    $i = Image::Magick->new;
    $i->Read($infile);
    $i->Solarize(factor=>70);
    print "Content-type: image/gif\n\n";
    binmode(STDOUT);
    $i->Write("jpeg:-");
    exit;

  • ウェーブ効果
    ウェーブ効果は、拡大しておかなければなりませんので、$i->Magnify();で縦横共に2倍に拡大しています。
    $i->Wave('4x40');
    #!/usr/local/bin/perl

    use Image::Magick;

    $infile = "transform.jpg";

    $i = Image::Magick->new;
    $i->Read($infile);
    $i->Magnify();
    $i->Wave('4x40');
    print "Content-type: image/gif\n\n";
    binmode(STDOUT);
    $i->Write("jpeg:-");
    exit;
Copyright 2004 Terra. All rights reserved. No reproduction or republication without written