2015/06/03(水) [n年前の日記]
#1 [gimp][cg_tools] GIMPのPython-fuについてメモ
動作確認をする際にやったことについてメモ。英語が分かる人は
_GIMP Python Documentation
を眺めたほうが早いですが。
まずは、Pythonコンソールを表示。フィルター → Python-Fu → コンソール。コレを使って動作確認していく。
まずは、Pythonコンソールを表示。フィルター → Python-Fu → コンソール。コレを使って動作確認していく。
>>> # Python-fuを使う時の最初のおまじない >>> from gimpfu import * >>> # 新規画像作成。横幅、縦幅、画像種類(RGB, GRAY, INDEXED)を指定。 >>> image = gimp.Image(640, 480, RGB) >>> # 作成した画像をGIMPウインドウ内に表示。 >>> gimp.Display(image) <display> >>> # そのままではレイヤーすら無い。レイヤーを新規作成。 >>> layer = gimp.Layer(image, "レイヤー名", 640, 480, RGBA_IMAGE, 100, NORMAL_MODE) >>> # 新規作成したレイヤーを画像に追加。レイヤー、レイヤー挿入位置を指定。 >>> image.add_layer(layer, 0) >>> # 前景色を指定。R,G,B を 0-255 の値で指定する。 >>> gimp.set_foreground(255, 64, 128) >>> # レイヤーを前景色で塗り潰す >>> layer.fill(FOREGROUND_FILL) >>> # 描画更新 >>> gimp.displays_flush() >>> # 現在アクティブなレイヤーを取得 >>> layer = image.active_layer >>> layer <gimp.Layer 'レイヤー名'> >>> # レイヤーの横幅を得る >>> layer.width 640 >>> # レイヤーの縦幅を得る >>> layer.height 480 >>> # 画像一覧を得る >>> gimp.image_list() [<gimp.Image '名称未設定'>] >>> # 画像一覧中から画像を一つ得る >>> image = gimp.image_list()[0] >>> image <gimp.Image '名称未設定'> >>> # レイヤー一覧を得る >>> image.layers [<gimp.Layer 'レイヤー名'>] >>> # レイヤー一覧から画像を一つ得る >>> layer = image.layers[0] >>> layer <gimp.Layer 'レイヤー名'> >>> # ピクセルの情報を得る。x, y, width, height, [dirty, [shadow]] を指定。 >>> src = layer.get_pixel_rgn(0, 0, 16, 16) >>> src <gimp.PixelRgn for drawable 'レイヤー名'> >>> src[0, 0] '\xff@\x80\xff' >>> src[15, 15] '\xff@\x80\xff' >>> # レイヤーはRGBAなので、1ドットにつき4バイトのはず >>> len(src[0, 0]) 4 >>> # gimp.xxxx と書ける名前の一覧を表示して確認 >>> dir(gimp) ['Channel', 'Display', 'Drawable', 'GroupLayer', 'Image', 'Item', 'Layer', (以下省略) ]
◎ 新規レイヤー作成時のアレコレをメモ。 :
新規レイヤー作成 gimp.Layer() に渡す値は以下の通り。
描画モードには、以下を指定できる。
- イメージ
- レイヤー名
- レイヤー横幅
- レイヤー縦幅
- レイヤー種類 (RGB_IMAGE, RGBA_IMAGE, GRAY_IMAGE, GRAYA_IMAGE, INDEXED-IMAGE, INDEXEDA-IMAGE)
- 透明度 (0-100)
- 描画モード (NORMAL-MODE, SCREEN-MODE等)
描画モードには、以下を指定できる。
- NORMAL-MODE (0) : 標準
- DISSOLVE-MODE (1)
- BEHIND-MODE (2)
- MULTIPLY-MODE (3) : 乗算
- SCREEN-MODE (4) : スクリーン
- OVERLAY-MODE (5)
- DIFFERENCE-MODE (6)
- ADDITION-MODE (7)
- SUBTRACT-MODE (8)
- DARKEN-ONLY-MODE (9)
- LIGHTEN-ONLY-MODE (10)
- HUE-MODE (11)
- SATURATION-MODE (12)
- COLOR-MODE (13)
- VALUE-MODE (14)
- DIVIDE-MODE (15)
- DODGE-MODE (16)
- BURN-MODE (17)
- HARDLIGHT-MODE (18) : ハードライト
- SOFTLIGHT-MODE (19) : ソフトライト
- GRAIN-EXTRACT-MODE (20)
- GRAIN-MERGE-MODE (21)
- COLOR-ERASE-MODE (22)
- ERASE-MODE (23)
- REPLACE-MODE (24)
- ANTI-ERASE-MODE (25)
◎ 1ドットずつ何かの処理をする時。 :
そのまま1ドットずつ処理をすると遅くて大変なのだけど、get_pixel_rgn() と array を使えば高速化できる可能性があるらしい。以下の記事を参考に。
_Fast Pixel Ops in GIMP-Python (Shallow Thoughts)
_GIMP Scripting: Pixel regions
_Writing GIMP Scripts and Plug-Ins
_GIMP Scripting
_Fast Pixel Ops in GIMP-Python (Shallow Thoughts)
_GIMP Scripting: Pixel regions
_Writing GIMP Scripts and Plug-Ins
_GIMP Scripting
◎ メニュー登録の仕方。 :
以下のスライドが参考になる。 (※ スライドを開いたら、カーソルキーの左右でページが切り替えられる。)
_GIMP Scripting: Minimal python script
_GIMP Scripting: Where in the menus?
_GIMP Scripting: Obsolete menu registration
メニュー指定が上のほうに書かれてるのは古い書き方らしい。下のほうに書いてある形が正解。
_GIMP Scripting: Minimal python script
_GIMP Scripting: Where in the menus?
_GIMP Scripting: Obsolete menu registration
メニュー指定が上のほうに書かれてるのは古い書き方らしい。下のほうに書いてある形が正解。
[ ツッコむ ]
以上、1 日分です。