よく使うコマンドとか、ありがちな処理の例とかのクイックリファレンスのつもり。
set w [magick create wand] magick delete $w unset w
set w [magick create wand] set p [magick create pixel] set d [magick create draw]
サンプル(BMPをJPGに変換する)
package require TclMagick set wand [magick create wand] $wand read test.bmp $wand write test.jpg magick delete $wand
基本的な使い方はこんな風にしてwandオブジェクトを作り、画像を読み込んで、いろいろコマンドを発行する形になります。なお、以下の章の例ではTclMagickのロードやファイルの読み込み、出力の処理は省略して書いています。
ImageMagick/GraphicsMagickの情報を表示する
magick library
#縦横幅 $wand width $wand height #ファイルフォーマット $wand format #バイト数 $wand imagesize #SHA-256の署名 $wand signature #使われている色の総数 $wand colors #色々な情報を出力する $wand describe
#色空間の取得 $wand colorspace #色空間の変更 $wand colorspace GRAY
使える色空間は次のとおり。
#色深度の取得 $wand depth r #色深度の取得 $wand depth r 8
チャンネルごとの取得と設定
$wand channeldepth r $wand channeldepth r 16
Q8版を使っているときは16bitに設定することはできないようだ。
package require TclMagick set i [magick create wand] $i read test.png set x 10 set y 10 binary scan [$i GetPixels $x $y 1 1 {RGBA} char] cccc r g b a set r [expr $r & 0xFF] set g [expr $g & 0xFF] set b [expr $b & 0xFF] set a [expr $a & 0xFF]Tclのbinary scanではunsigned char型で読めないので、読み込んでからマスクを掛ける。
package require TclMagick set i [magick create wand] $i read test.png set x 10 set y 10 set r 255 set g 128 set b 0 set a 255 $i SetPixels $x $y 1 1 {RGBA} char [binary format c* [list $r $g $b $a]]
package require TclMagick package require TkMagick set wand [magick create wand] $wand read test.bmp image create photo temp #wandのデータをtkimageに移す magicktophoto $wand temp #x=10,y=10のピクセルの読み込み temp get 10 10 #x=10, y=10のピクセルへ白を出力 temp put #FFFFFF -to 10 10 #tkimageのデータをwandに移す phototomagick temp $wand
$wand minify
$wand magnify
$wand resize 256 256 gaussian 10.0 $wand scale 256 256これはどちらも同じくサイズを指定のサイズに変更するコマンドです。 resizeはscaleと違って次のフィルターと組み合わせてリサイズすることができます。 undefined, point, box, triangle, hermite, hanning, hamming, blackman, gaussian, quadratic, cubic, catrom, mitchell, lanczos, bessel, sinc
$wand sample 256 256
proc zoom {wand xzoom yzoom} { set w [expr int([$wand width] * $xzoom)] set h [expr int([$wand height] * $yzoom)] return [$wand scale $w $h] } zoom $wand 0.5 0.5
回転は領域外のピクセルのオブジェクトを作る必要があります。
#領域外は黒で30度回転 set wand [magick create wand] set black [magick create pixel] $black set red 0.0 green 0.0 blue 0.0 $wand read sample.jpg $wand rotate $black 30
複数のイメージはリストで管理されています。たとえば
$w read test1.jpg $w read test2.jpg
のように連続して複数の画像を読み込んだ場合、読み込んだ順にリストに追加されます。リストの画像にそれぞれアクセスするには次のようなコマンドを使って画像を選択します。
#持ってるイメージの数 $wand number #イテレータの初期化 $wand resetiterator #次のイメージがあるかどうか $wand hasnext #前のイメージがあるかどうか $wand hasprevious #次のイメージに移動 $wand next #前のイメージに移動 $wand previous #削除 $wand remove
(書く予定)