2017/04/28(金) [n年前の日記]
#1 [gimp][python] GIMP上でドット絵モドキを生成するPython-Fuスクリプトを書いた
GIMP上でドット絵モドキを生成するPython-Fuスクリプトを書いてみたり。以下のような画像が作れます。
スクリプトソースは以下。
_tinypixelartgen.py
動作には、Python-Fu が動いて pycairo も入ってる GIMP が必要、なんだけど、おそらく GIMP 2.8.x 以降なら、Python-Fu も pycairo も同梱されていて動くんじゃないかな、と…。
ライセンスは、CC0 / Public Domain ってことで。「もっとこうしたらそれっぽくなるんじゃね?」と閃いた方はガンガン弄ってガンガン公開しちゃってください。
スクリプトソースは以下。
_tinypixelartgen.py
動作には、Python-Fu が動いて pycairo も入ってる GIMP が必要、なんだけど、おそらく GIMP 2.8.x 以降なら、Python-Fu も pycairo も同梱されていて動くんじゃないかな、と…。
ライセンスは、CC0 / Public Domain ってことで。「もっとこうしたらそれっぽくなるんじゃね?」と閃いた方はガンガン弄ってガンガン公開しちゃってください。
◎ インストール方法。 :
_tinypixelartgen.py
をダウンロードして、GIMPのユーザフォルダ/plug-ins/ にコピーすればインストールできます。
_[Gimp] Pythonでスクリプトをはじめる - Qiita で紹介されてるように、
_[Gimp] Pythonでスクリプトをはじめる - Qiita で紹介されてるように、
編集 → 設定 → フォルダー → プラグインを見れば、場所が分かるかも。
◎ 使い方。 :
GIMPを起動後、何か画像を(512x512ドットぐらいで)作成しておいて、以下でスクリプトを実行。
実行すると、下のようなダイアログが表示されますが…。
一応説明しておくと…。
フィルター → 下塗り → Tiny Pixleart (Filter -> Render -> Tiny Pixelart)
実行すると、下のようなダイアログが表示されますが…。
一応説明しておくと…。
- Width と Height が、ドット絵モドキ1つ分の横幅と縦幅。
- Row と Column が、横と縦にいくつ並べるか。
- Randomize を ON(「する」) にすると、実行するたびにランダムな画像が作られる。(ランダムシード(乱数の種)がランダムになる)
- Randomize を OFF(「しない」) にすると、その下の Random seed の数値に従って、実行するたびに同じ画像が作られる。
- X mirror、Y mirror は、横方向、縦方向をミラーリングするか否か。
- Create で Image を選ぶと、画像を新規作成して、そこにドット絵モドキを作る。
- Create で Layer を選ぶと、現在開いてる画像にレイヤーを新規作成して、そこにドット絵モドキを作る。
- Layer name は、新規作成されるレイヤーのレイヤー名。
- Set grid w x h は、ドット絵モドキのサイズをグリッド間隔にも設定するか否か。設定しておけば、表示 → グリッドの表示、表示 → グリッドにスナップ、で、一つ一つが選択しやすくなる。
◎ 応用。 :
[ ツッコむ ]
#2 [gimp][python] GIMPで「グリッドの表示」をスクリプトから制御する方法が分からず
GIMP上で動くPython-Fuスクリプトを書いてはみたものの、「グリッドの表示」をするための関数が分からず。
以下の2つは分かったのだけど…。
_gimpgrid
しかし、表示を有効化する関数が見つからない。スクリプト側から利用できる形では用意されてないのだろうか…。
できれば「グリッドにスナップ」まで有効化したいのだけど。表示すら有効にできないのではなあ…。
以下の2つは分かったのだけど…。
- グリッドの間隔を設定する関数は、gimp-image-grid-set-spacing(Image, w, h)。
- グリッドのオフセットを設定する関数は、gimp_image_grid_set_offset(Image, x, y)。
_gimpgrid
しかし、表示を有効化する関数が見つからない。スクリプト側から利用できる形では用意されてないのだろうか…。
できれば「グリッドにスナップ」まで有効化したいのだけど。表示すら有効にできないのではなあ…。
◎ 無いのは当然かもしれない。 :
考えてみれば…。何かしらの自動処理を行う場面を想像すると、グリッドの表示や吸着(スナップ)って、制御できても意味が無いもんな…。
アレはあくまで人間様が、目視で何かの作業をしていく際に「あったら便利」な機能で。スクリプトなどは、例えば等間隔で正確無比に仕事をしていく、なんてのが得意なのだから、グリッドなんて最初から要らんわけで…。
自動処理をした後で、「ここから先はグリッドがあったほうが便利だろう」と思えてくる結果を生成してしまう、そんなスクリプトの仕様そのものが間違っている可能性も。
アレはあくまで人間様が、目視で何かの作業をしていく際に「あったら便利」な機能で。スクリプトなどは、例えば等間隔で正確無比に仕事をしていく、なんてのが得意なのだから、グリッドなんて最初から要らんわけで…。
自動処理をした後で、「ここから先はグリッドがあったほうが便利だろう」と思えてくる結果を生成してしまう、そんなスクリプトの仕様そのものが間違っている可能性も。
◎ やっぱり制御できないのはおかしい気もする。 :
「グリッドが必要になる結果を生成すること自体がおかしい」と言われても…。
なら、例えば64枚の画像なりレイヤーなりをガーッと生成したとして。それを一覧表示して人間様が眺められる機能をGIMPが持っているのですかと。否。そんなもの、GIMPは持ってないわけで。
だったら、一枚の画像にずらりと並べて、人間様が目視で選んでいくしかねえべや。そして、ずらりと並べたら、一つ一つを選択する際にグリッドがあったほうが便利やろ、となるわけで。
「グリッドなんぞ制御する意味無し」と断言するためには、大量の画像なりレイヤーなりを一覧で目視して選別を可能にする別の機能が必要なのではないかなあ…。でも、ソレを実装する手間暇を考えたら、スクリプトによるグリッドの制御を可能にして「グリッド使ってどうにかして」と言っちゃうほうがはるかに楽であろう予感。
というか、グリッドの間隔やオフセットを設定したり取得したりする機能があるのに、グリッドの表示や吸着を制御する機能が見当たらないのがやっぱりおかしい気もする。「グリッドまで制御する必要は無い」のであれば、間隔やオフセットを設定する関数は何故存在しているのか。それらがあるなら、表示や吸着もありそうなものではないか。
その2つは、想定外の関数名で隠れているのか、それとも実装を忘れただけなのか…。
なら、例えば64枚の画像なりレイヤーなりをガーッと生成したとして。それを一覧表示して人間様が眺められる機能をGIMPが持っているのですかと。否。そんなもの、GIMPは持ってないわけで。
だったら、一枚の画像にずらりと並べて、人間様が目視で選んでいくしかねえべや。そして、ずらりと並べたら、一つ一つを選択する際にグリッドがあったほうが便利やろ、となるわけで。
「グリッドなんぞ制御する意味無し」と断言するためには、大量の画像なりレイヤーなりを一覧で目視して選別を可能にする別の機能が必要なのではないかなあ…。でも、ソレを実装する手間暇を考えたら、スクリプトによるグリッドの制御を可能にして「グリッド使ってどうにかして」と言っちゃうほうがはるかに楽であろう予感。
というか、グリッドの間隔やオフセットを設定したり取得したりする機能があるのに、グリッドの表示や吸着を制御する機能が見当たらないのがやっぱりおかしい気もする。「グリッドまで制御する必要は無い」のであれば、間隔やオフセットを設定する関数は何故存在しているのか。それらがあるなら、表示や吸着もありそうなものではないか。
その2つは、想定外の関数名で隠れているのか、それとも実装を忘れただけなのか…。
◎ 別アプリと連携できればいいのに。 :
「そういう作業をしたいなら別アプリとして作るべきだ」と言われそうな気もする。が、その別アプリで作成した結果画像を、どのみちGIMPに持っていって編集するわけで。だったらGIMP上で作ってしまうほうが早いじゃん、てなところも。
GIMPが、別アプリと連携して、レイヤーを渡したり持ってきたりすることができればいいのかもしれない。もし、そういう機能があれば、例えば ImageMagick にレイヤーを渡して処理してもらって、その結果をGIMPのレイヤーに書き戻す、てなこともできて便利になったりするのかも。
とは言え、各CGツールが連携して処理をするための画像フォーマットなんて決まっているのだろうか、という疑問も。
クリップボード? アレってアルファチャンネルを持てたっけ?
ググってみたら、ImageMagick は clipboard: なる指定で、クリップボードから画像を読み込んだりできるみたいで。
_ImageMagickを使おう
なるほど、クリップボードを経由してやり取りする手もアリと言えばアリ、なのかなあ…。
もっとも、各アプリがクリップボード経由でデータを渡そうとしてるタイミングで Ctrl + C を押したらどうなるんだろう、という疑問も。
MIDIなんかもそうだったけど、連携できるか否かって、何かしらを作っていくときには結構効いてくる、ような気がする…。
GIMPが、別アプリと連携して、レイヤーを渡したり持ってきたりすることができればいいのかもしれない。もし、そういう機能があれば、例えば ImageMagick にレイヤーを渡して処理してもらって、その結果をGIMPのレイヤーに書き戻す、てなこともできて便利になったりするのかも。
とは言え、各CGツールが連携して処理をするための画像フォーマットなんて決まっているのだろうか、という疑問も。
クリップボード? アレってアルファチャンネルを持てたっけ?
ググってみたら、ImageMagick は clipboard: なる指定で、クリップボードから画像を読み込んだりできるみたいで。
_ImageMagickを使おう
なるほど、クリップボードを経由してやり取りする手もアリと言えばアリ、なのかなあ…。
もっとも、各アプリがクリップボード経由でデータを渡そうとしてるタイミングで Ctrl + C を押したらどうなるんだろう、という疑問も。
MIDIなんかもそうだったけど、連携できるか否かって、何かしらを作っていくときには結構効いてくる、ような気がする…。
[ ツッコむ ]
以上、1 日分です。