GIMPレイヤーをPNG形式で一括エクスポートするPython-Fuスクリプト

GIMP コンピュータ
GIMP
GIMPのレイヤーをpngファイルとしてエクスポートするスクリプトを作成してみました。
出力先はxcfファイルが保存されたディレクトリに”xcfベース名\layers\レイヤー名.png”形式で作成されます。
ファイル名(レイヤー名)は日本語OKですが、ディレクトリに含まれるxcfファイル名やレイヤーグループに日本語(マルチバイト)が含まれると失敗します。
Windows版GIMPのPython-Fuでos.mkdir()で文字化け
日本語を含むパスをos.mkdir()でディレクトリを作ろうとすると文字化けが発生しました。ただ、日本語を含むパスの画像ファイルを開いたり保存したりすることは出来るので、根本的な解決は自分には無理そうに感じました。アルファベットの場合は問題...

#!/usr/bin/env python
# coding: utf8
# 
# 全てのレイヤーをエクスポート
# 
from gimpfu import *
from array import array
from time import time
import os

def exports(dir_name, image, layer):
    gimp.message(dir_name)
    if not(os.path.isdir(dir_name)):
        os.mkdir(dir_name)
    layer_path = os.path.join(dir_name, layer.name + '.png')
    # エクスポート
    pdb.gimp_file_save(image, layer, layer_path, "")
    if (len(layer.children) == 0):
        return
    for sub_layer in layer.children:
        sub_dir = os.path.join(dir_name, layer.name)
        exports(sub_dir, image, sub_layer)
def plugin_main(image, layer):
    # プログレスバー初期化
    gimp.progress_init("ExportAllLLayer")
    # 出力先のディレクトリの作成
    dir_path, _ = os.path.splitext(image.filename)
    layers_dir = os.path.join(dir_path, 'layers')
    if not(os.path.isdir(dir_path)):
        os.mkdir(dir_path)
    # レイヤーの一覧を取得
    try:
        i = 0
        for sub_layer in image.layers:
            exports(layers_dir, image, sub_layer)
            # プログレスバー更新
            i = i + 1
            gimp.progress_update(float(i)/float(len(image.layers)-1))
    finally:
        # レイヤーの更新
        layer.flush()
        layer.update(0,0,w,h)
register("ExportAllLayer", "", "", "", "", "",
    "レイヤー一括エクスポート", 
    "*",
    [
    (PF_IMAGE, "image", "Input image", None),
    (PF_DRAWABLE, "drawable", "Drawable", None),
    ],
    [],
    plugin_main,
    menu = "<Image>/Filters/My")
main()

コメント