2020年2月17日月曜日

GIMP Script-Py (番外) CSV 渡し - 実験

GIMP Python の 番外 です。
選択範囲の座標値を 外部アプリ に伝えたい ... 。
さぁ、どうしようか、 のスクリプト作成の実験段階として、
以下を書き残します。


どうしても、スクリプトを書いたりすると、
凝り固まった方法で逃げ切ろうとします。

例えば、クリップボード転送とか ... 。
でも、 ファイル渡しって言う手がある訳で ... 。

とある GIMP QA サイト で回答した時の事です。
gimp-user-list mailing list です。
経緯は 以下からの方が分かり易いでしょう。
  https://www.gimpusers.com/forums/gimp-user/21680-how-to-get-the-positions-x-y-width-depth-of-selected-rectangle-or-selected-ellipse

選択範囲の情報を Excel に渡したいとのご質問がありました。
う~ん。  単一の値には ... ならないよなぁ~。
そこで、回答を寄せると、
別の方から、こんな方法もあると、助けの手が入りました。
Dear Ofnuts. Thanks! ;)
ありがたいですねぇ。 ;)

正にそれが、ファイル渡しだったのです。
以下に、実際に、稼働可能なスクリプトを例示します。
通常のものとは違い、
コンソールでの実行を前提にしますので、
Register 絡みのものはありません。
また、値確認の為のコードも含みます。

そう、スクリプト作成前の、
コンソールでの実験と捉えて下さい。

画像を開き、選択範囲を指定した状態で、コンソールから実行します。 


Please learn the basic scripting of GIMP Python.
See as follows.
https://www.gimp.org/docs/python/index.html

If opened image by GIMP is one only at first and it has one layer and a selection is existing.
Example on Windows OS.


ここからが、コンソールです。  :)

image = gimp._id2image(1)
# 1 is shown at GIMP Title-Bar as '[Name] (Status)- 1.0 (RGB ...'
image
import csv
file_name = "c:\\Users\\YourName\\Documents\\Temp\\SampleXcfCsv.txt"
file_name
non_empty, x1, y1, x2, y2 = pdb.gimp_selection_bounds(image)
x1
y1
x2
y2
with open(file_name, 'w') as f:
  writer = csv.writer(f)
  writer.writerow([x1, y1, x2, y2])

実際の表示例。

GIMP 2.10.14 Python Console
Python 2.7.17 (default, Oct 23 2019, 05:20:31)  [GCC 9.2.0 64 bit (AMD64)]
>>> image = gimp._id2image(1)
>>> # 1 is shown at GIMP Title-Bar as '[Name] (Status)- 1.0 (RGB ...'
>>> image
<gimp.Image '[DSC_0061_w1807xh1200] (インポートされた画像)'>
>>> import csv
>>> file_name = "c:\\Users\\YourName\\Documents\\Temp\\SampleXcfCsv.txt"
>>> file_name
'c:\\Users\\YourName\\Documents\\Temp\\SampleXcfCsv.txt'
>>> non_empty, x1, y1, x2, y2 = pdb.gimp_selection_bounds(image)
>>> x1
240
>>> y1
345
>>> x2
786
>>> y2
819
>>> with open(file_name, 'w') as f:
...   writer = csv.writer(f)
...   writer.writerow([x1, y1, x2, y2])
...
Traceback (most recent call last):
  File "<input>", line 1, in <module>
IOError: [Errno 2] No such file or directory: 'c:\\Users\\YourName\\Documents\\Temp\\SampleXcfCsv.txt'

はい。
YourName を置換しないで実行すれば、斯くの通り。 エラー表示。
でも、 ここを自分の環境に合わせれば(最初の赤い文字部分)、指定の場所に新規ファイルが生成されます。

  ご存知の様に、
  Windows OS で、Python 上の フォルダ区切り記号 は ¥ では無く ¥¥ です。

    ご参考 以下の右辺は皆同じ *1.
>>> file_name = "c:\\Users\\YourName\\Documents\\Temp\\SampleXcfCsv.txt"
>>> # "raw" notation
>>> file_name = r'c:\Users\YourName\Documents\Temp\SampleXcfCsv.txt'
>>> # triple quoting
>>> file_name = '''c:\Users\YourName\Documents\Temp\SampleXcfCsv.txt'''
>>> file_name = """c:\Users\YourName\Documents\Temp\SampleXcfCsv.txt"""



参考迄に。 
何時も、こんな感じでスクリプトを作って行きます。.



[2020/02/17] 事後に Ofnuts さま ご指摘の フォルダ区切りの件 を追記 *1.

0 件のコメント:

コメントを投稿