「m256_layers_offsets_dump_0.0.1.py.txt」の編集履歴(バックアップ)一覧はこちら

m256_layers_offsets_dump_0.0.1.py.txt」(2012/08/07 (火) 00:57:45) の最新版変更点

追加された行は緑色になります。

削除された行は赤色になります。

//python #!/usr/bin/env python # -*- coding: utf-8 -*- # -*- mode: python; Encoding: utf8n -*- u""" 全レイヤーの、左上座標、幅、高さ、をテキスト出力保存する. by mieki256 0.0.1 2012.08.06 GIMP2.8、GIMP2.6用に作成。 """ from gimpfu import * import os.path def is_old_gimp(): u"""GIMP 2.6.x上で動かしているか調べる.""" version = pdb.gimp_version() if version.startswith("2.6."): return True if version.startswith("2.4."): return True else: return False def get_header(kind, imgname): u"""テキスト出力のヘッダ部分を返す.""" if kind == 0: # テキスト形式 return "" else: # xml形式 str = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" str += "<TextureAtlas imagePath=\"%s\">\n" % (imgname) return str def get_footer(kind): u"""テキスト出力のフッター部分を返す.""" if kind == 0: # テキスト形式 return "" else: # xml形式 return "</TextureAtlas>\n" def get_line_str(kind, name, x, y, w, h): u"""1行分のテキストを得る.""" if kind == 0: # テキスト形式 return "%s,%d,%d,%d,%d\n" % (name,x,y,w,h) else: # xml形式 return " <SubTexture name=\"%s\" x=\"%d\" y=\"%d\" width=\"%d\" height=\"%d\"/>\n" % (name,x,y,w,h) def get_layer_info(kind, layer): u"""1枚分のレイヤーの情報を得る.""" lname = layer.name lx = layer.offsets[0] ly = layer.offsets[1] lw = layer.width lh = layer.height return get_line_str(kind, lname, lx, ly, lw, lh) def get_layer_ids(layer_ids): u"""レイヤーIDリストを再帰で辿って取得する.(GIMP2.8以降用)""" ids = [] for i in layer_ids: item = gimp.Item.from_id(i) if pdb.gimp_item_is_group(item) == 1: # レイヤーグループだったので、子供レイヤーのIDリストを取得 num_children, child_ids = pdb.gimp_item_get_children(item) # 子供レイヤーのIDリストを結合 ids.extend(get_layer_ids(child_ids)) else: # 通常レイヤーだった ids.append(i) return ids def python_fu_dump_layers_offsets(image, drawable, save_dir, fname, kind): u"""メインの処理""" # 出力ファイルのパスを生成 output_path = os.path.join(save_dir, fname) str = get_header(kind, image.name) # レイヤーIDリストを取得 num_layers, layer_ids = pdb.gimp_image_get_layers(image) if is_old_gimp(): # GIMP 2.6以前用の処理 for layer in image.layers: str += get_layer_info(kind, layer) else: # GIMP 2.8以降用の処理 # 再帰的に辿って、レイヤーIDリストを全取得 ids = get_layer_ids(layer_ids) for i in ids: # レイヤーIDからitem情報を取得 item = gimp.Item.from_id(i) # 1行分のテキストを取得 str += get_layer_info(kind, item) str += get_footer(kind) # テキストファイルとして出力 fw = open(output_path, 'w') fw.write(str) fw.close() # pdb.gimp_message("%s に保存しました." % (output_path)) # ---------------------------------------- # GIMPへのメニュー登録、ダイアログの指定 register( # プロシジャの名前 "python-fu-dump-layers-offsets", # プロシジャの説明文 "全レイヤーの座標やサイズをテキストファイルに出力", # PDBに登録する追加情報 "dump layers offsets", # 作者名 "mieki256", # ライセンス情報 "Public Domain.", # 作成日 "2012.08.06", # メニュー表示場所・名前 "<Image>/Layer/全レイヤー情報をダンプ", # 対応する画像タイプ "RGB*, GRAY*, INDEXED", # ダイアログの指定 [ # ディレクトリ名の選択欄(変数名, 項目名, 初期値) (PF_DIRNAME, "save_dir", "保存ディレクトリ", "."), # 保存ファイル名の入力欄 (PF_STRING, "fname", "保存ファイル名", 'dump_temp.txt' ), # 出力形式の選択欄 (PF_OPTION, "kind", "出力形式", 0, ["text", "xml"]) ], # 戻り値の定義 [], # 処理を埋け持つ関数名 python_fu_dump_layers_offsets ) # プラグインを駆動させるための関数 main()

表示オプション

横に並べて表示:
変化行の前後のみ表示: