2009年12月8日火曜日

FreeBSDでPerlMagick(その1)はじめに

追記 2011/03)この間 ImageMagick のサイトが更新されたみたいなので,もしかしたらここの記述が若干ずれているかもしれないのでご注意を(元の記述は2009年12月なので)
このところ,FreeBSD上でのPerlMagick (ImageMagick) にはまっている。もともとはバイク用のサイトにアップする写真の加工が目的で使い始めたが,結構いろいろできるみたいなので,遊んでみた。折角遊んでいろいろわかったことがあるので,ちょこちょこ書こうと思う。

 Image Magick はUnixやWindows上で画像をいじるためのソフトであり,webサイトはImage Magickのサイトにある。本来Image Magick はunixならx-windows上で動き,画像も見せてくれるものだが,ここではPerlを使ったcgiでの使用を念頭に置いているため,Image Magickのサブセット(?言葉が正しいか不安…)であるPerlMagickの使い方について書いていきたい。

(0) 目次

かなり多くの事を書いているので,目次を作ってみた。

FreeBSDでPerlMagick(その1)はじめに
(1) 関連リンク
(2) Perl Magickのインストール
(3) Perl Magickの使い方
(4) pngでの書き出し

FreeBSDでPerlMagick(その2)図と文字を描く
(5) 新しい図のためのcanvasの準備
(6) 図を描く:Drawコマンド
(7) 文字を描く:Labelとして読み込む方法
(8) Annotate を用いた文字の描画

FreeBSDでPerlMagick(その3)画像の加工
(9) Rotation:図の回転
(10) Resize:図の大きさの変更
(11) Crop:図の切り取りとTransformを使ったCropping
(12) Blur:ぼかす
(13) Sketch, Spread, Oilpaint:絵画風の加工
(14) Vignette:縁飾り

FreeBSDでPerlMagick(その4)図形の描画と画像の加工
(15) Draw:図形の描画(その2)
(16) Composite:画像の合成
(17) Quantizeを用いた白黒画像への変換
(18) Fx:三原色の色チャネルの演算
(19) Colorize:色をつける
(20) 図の一部を透明にする:TransparentとFx

FreeBSDでPerlMagick(その5)さらに進んだコマンド
(21) Fx(その2)
(22) LevelやGamma値の調整
(23) Negate:ネガを作る
(24) Posterize:色の種類を減らす
(25) OrderedDither:ザラザラにするコマンド?
(26) 明るさの調整 : SigmoidalContrast
-------------------------------------------------

(1) 関連リンク

まずは関連する有益なリンクについて書こう。
 ・Image MagickのサイトImage Magick の本家のサイト(英語)

 ・PerlMagickPerlMagick のサイト(英語)
   Image Magick の本家サイトのメニューからもたどれる。

 ・Image Magickの使い方(Usage)のサイト:結構詳しく書いてあるが,PerlMagick じゃなくて,Image Magick について書いてあるので,
   そのままでは使えない。Perlスクリプトへの脳内変換が必要。おまけに英語やし。
 (追記)でもこの Usage の説明は重要である。
  それぞれの項目のサブページを見ると,具体例を示しながら説明してあるので,必要に応じて読むと役に立つ。


 ・Image MagickのコマンドラインオプションのサイトImage Magickcommand-line tools を使う時のオプションの一覧。
   PerlMagick のコマンドは,Image Magick ではcommand-line toolsのオプションに相当することが多い。当然英語のサイト。

 ・Image MagickのExamplePerlMagick を使った例が載っている。
   写真を使った例で,初めて見た時,なぜ渦巻変換などの操作が必要か,などがわからなかった。
   多くの変換は,幾何学的な図を描き,それを変形するのに用いるといろいろな図が描けていいらしい。
   写真を渦巻変換してもお姉さんの顔がひずむだけやし…

 ・example.pl:上記のPerlMagick Exampleのソースコード
   貴重なPerlスクリプトの例題

 ・画像処理についてあれこれ:Perlではないが,Image Magick などを使って,いろいろな画像処理,画像描画をされていて,
   どんな処理ができるかの参考になる。具体的な画像で見せてくれるのがいいが,最近はImage Magick じゃないものが多いかも…。

 ・FilterとBlurの効果の一覧:一個前のThumbnailを作るという投稿でも書いたが,Resizeの時のFilterとBlurの効果についての一覧

 ・Thumbnailを作る:このブログの1個前の投稿記事。PerlMagick を使ってサムネイルを作ったもの。参考にしてくださいな。

 他にもきっといいサイトが多く有ると思うが,とりあえず上記を書いておこう。他に良いサイトを見つければ,おいおい追加していこう。
追記)1年以上たつけど,まだ追加はされてません…。あしからず…

(2) Perl Magickのインストール

 まずは,Perl Magick をFreeBSDにインストールしないといけない。しかし,これは実はとても簡単。筆者は
/usr/ports/graphics/ImageMagick
からインストールした。これはImage Magick のインストールだが,一緒にPerl Magick もインストールされる。

(3) Perl Magickの使い方

 使い方だが,最低限,以下のように書くと使うことができる。当然Perl のスクリプトなので,「#!/usr/bin/perl」などのおまじないを忘れないように。
use Image::Magick; # packageを使う宣言

my $img = Image::Magick->new; # インスタンスの生成
$img->Read('./test.jpg');
# 画像の読み込み(描画用に,白や透明やグラデーションなどのcanvasを新しく用意することもできる)
# -------------------------------------
$img->Rotate(degrees => 90); # 画像に対する処理(いろいろな処理ができる。後々述べる)
# -------------------------------------
$img->Write('./newpict.jpg'); # ファイルへの書き出し
undef $img; # 後処理(メモリの開放)
ここで,最初の行はPerlMagick のパッケージを使う宣言である。その次の項目(3行目)で取り扱う画像に$imgという変数を割り当てている。実際に$imgに画像を読み込んでいるのが,Read のある行。そして,ここではRotate という処理をして,Write でファイルとして書き込んでいる。最後に$imgが使っていたメモリを開放してる。

 PerlMagick のいろいろなコマンドはPerlMagickのサイトにあるが,引数の意味などを書いてくれてない。そこで,Image Magickのコマンドラインオプションのサイトで,PerlMagick コマンドに相当するオプションを探して,引数の意味を推定する。場合によってはImage Magickの使い方(Usage)のサイトの該当する処理の所をある程度読まないといけない。このサイトに載っている情報の多くはそのようにして得られたものである。このサイトで少しでも皆さんの理解の手助けをできればサイトを作った甲斐がある。

(4) pngでの書き出し

 ファイルをWrite で書き出すと,通常はjpegになるみたい。でもpngで出力したい場合も出てくる。そんな時は以下のようにするらしい。
binmode(STDOUT);
$img->Write("png:test.png");
 基本的には上記のスクリプトの作業の部分にいろいろと作業を書いて出力すれば結果が得られる。
次は,新しいキャンバスを用意して,図や文字を描いてみる。

FreeBSDでPerlMagick(その2)図と文字を描くに続く

0 件のコメント: