目次

よく使うコマンドとか、ありがちな処理の例とかのクイックリファレンスのつもり。

基本的な使い方

  • オブジェクトの作成と削除
    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

Tkとの連携

(書く予定)

リンク

コメントをどーぞ



CategoryTclTk


|New|Edit|Freeze|Diff|Backup|Upload|Copy|Rename|
Last-modified: 2004-08-27 (Fri) 00:00:00 (1455d)
HTML convert time: 0.083 sec.