mieki256's diary



2015/06/03(水) [n年前の日記]

#1 [gimp][cg_tools] GIMPのPython-fuについてメモ

動作確認をする際にやったことについてメモ。英語が分かる人は _GIMP Python Documentation を眺めたほうが早いですが。

まずは、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() に渡す値は以下の通り。
  1. イメージ
  2. レイヤー名
  3. レイヤー横幅
  4. レイヤー縦幅
  5. レイヤー種類 (RGB_IMAGE, RGBA_IMAGE, GRAY_IMAGE, GRAYA_IMAGE, INDEXED-IMAGE, INDEXEDA-IMAGE)
  6. 透明度 (0-100)
  7. 描画モード (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

メニュー登録の仕方。 :

以下のスライドが参考になる。 (※ スライドを開いたら、カーソルキーの左右でページが切り替えられる。)

_GIMP Scripting: Minimal python script
_GIMP Scripting: Where in the menus?
_GIMP Scripting: Obsolete menu registration

メニュー指定が上のほうに書かれてるのは古い書き方らしい。下のほうに書いてある形が正解。

以上です。

過去ログ表示

Prev - 2015/06 - Next
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project