xcfファイルから、pngファイルを作成するのに、gimpfuモジュールを利用する(windows)
目標
gimpのデータファイルxcfファイルから、pngファイルを作りたいと思った。
手動でなくて、スクリプトで行いたい。コマンドライン(cygwinのbash)からしたい。
フォルダを指定して、一括で行いたい。
どうもgimpfuでできるらしい。gimpfuは、gimpのpython向けpython拡張モジュールらしい。
まずは、gimpfuがimportできるようにしてみた。
環境
Windows7 64bit
インストールしたもの
python 2.6.6
http://www.python.org/download/releases/2.6.6/
gimp2.6.11のpython拡張が、2.5と2.6にしか、対応していなかったので。
変換スクリプト作成
これでいいのか、確かめねばなるまい。使ってみるしかない。
幸いなことに具体的な目標がある。
xcf2img.py
#!/usr/bin/env python # -*- coding: utf-8 -*- import os.path from glob import glob import gimpfu pdb = gimpfu.pdb def convert(filename, out_filename): img = pdb.gimp_file_load(filename, filename) layer = pdb.gimp_image_merge_visible_layers(img, gimpfu.CLIP_TO_IMAGE) pdb.gimp_file_save(img, layer, out_filename, out_filename) pdb.gimp_image_delete(img) def run(xcfdir=".", imgdir=".", ext=".png"): pathname = os.path.join(xcfdir, "*.xcf") for xcf_file in glob(pathname): base_name = os.path.basename(xcf_file).rsplit(".",1)[0] img_file = os.path.join(imgdir, base_name) + ext convert(xcf_file, img_file)
実行結果
$ ./topng.sh (gimp-2.6.exe:2480): LibGimpBase-WARNING **: gimp-2.6.exe: gimp_wire_read(): error libpng warning: zero length keyword libpng warning: Empty language field in iTXt chunk : : 画像の数続く ; : libpng warning: zero length keyword libpng warning: Empty language field in iTXt chunk batch command executed successfully $
実行してみると、xcfファイルと同じ数のpngファイルができていた。
ひとつ開くときちんと表示できた。OKのようだ。
エラーと、ワーニングが出ているが、一応さらっと調べて、覚えておいて、
自分に影響がでるまでは、おいておく。つまり保留だ。
考察
手動でgimpで保存したpngファイルと比較すると、ファイルサイズが違っていた。
手動で保存したpngは、色深度24bitで、スクリプトで変換したものは、色深度32bitであった。
ここらへんは、また別途調べたほうがよいと思われる。
追記
この現象、自分に影響があったので、調べた。
convert関数を以下のようにすると、色深度24bitでpngが作成できた。
def convert(filename, out_filename): img = pdb.gimp_file_load(filename, filename) img.flatten() pdb.gimp_file_save(img, img.layers[0], out_filename, out_filename) pdb.gimp_image_delete(img)