***目次
#contents
よく使うコマンドとか、ありがちな処理の例とかのクイックリファレンスのつもり。
***基本的な使い方
-オブジェクトの作成と削除
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
使える色空間は次のとおり。
--undefined
--RGB
--GRAY
--transparent
--OHTA
--LAB
--XYZ
--YCbCr
--YCC
--YIQ
--YPbPr
--YUV
--CMYK
--sRGB
--HSL
--HWB
***色深度の設定と取得
#色深度の取得
$wand depth r
#色深度の取得
$wand depth r 8
チャンネルごとの取得と設定
$wand channeldepth r
$wand channeldepth r 16
Q8版を使っているときは16bitに設定することはできないようだ。
***ピクセルカラーのセット/ゲット
-X、Yの色を取得
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型で読めないので、読み込んでからマスクを掛ける。
-X、Yに色を出力
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]]
-いちいちバイナリ変換するのは使い勝手が悪いので、tkimageにデータを変換してからピクセルにアクセスする方法もあります。ただし、現在のところtkimageではアルファチャンネルにアクセスする手段がありません!。なので使えるのはRGBのみです。Aチャンネルがあった場合、マットの0か1になります。
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
-倍率でサイズ変更する~
これはコマンドではできません。zoomとかあると思ったんですが・・・。無いので次のようにやります。
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
//***出力フォーマットの詳細
//-Jpeg
//-Gif
***Tkとの連携
(書く予定)
***リンク
-http://tclmagick.sourceforge.net/
-http://www.graphicsmagick.org/
***コメントをどーぞ
#comment
----
[[CategoryTclTk]]
HTML convert time: 0.002 sec.