xcfはGIMP専用バイナリ形式。
前回まで
手順
- GIMP起動
- メニュー
Filsters
→Python-fu
→コンソール
クリック - 以下のコードをペーストして実行する
from gimpfu import * img = gimp.Image(512, 512, RGB) layer = gimp.Layer(img, "layer01", 512, 512, RGBA_IMAGE, 100, NORMAL_MODE) layer.fill(TRANSPARENT_FILL) img.add_layer(layer, 0) gimp.Display(img) import cairo surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, 512, 512) ctx = cairo.Context(surface) ctx.set_source_rgb(1.0, 0.0, 0.0) ctx.rectangle(128, 128, 256, 256) ctx.fill() import struct def get_rgba_str(bgra_buf): rgba_buf = "" l = len(bgra_buf) for i in range(l / 4): i0 = i * 4 i1 = i0 + 4 bgra = struct.unpack('@L', src[i0 : i1])[0] a = (bgra >> 24) & 0x0ff r = (bgra >> 16) & 0x0ff g = (bgra >> 8) & 0x0ff b = bgra & 0x0ff rgba = struct.pack('4B', r, g, b, a) rgba_buf += rgba return rgba_buf src = surface.get_data() dst = get_rgba_str(src) rgn = layer.get_pixel_rgn(0, 0, 512, 512, True, True) rgn[0:512, 0:512] = str(dst) layer.flush() layer.merge_shadow() layer.update(0, 0, 512, 512) from datetime import datetime timestamp = datetime.now().strftime("%Y%m%d%H%M%S") out_path = "/tmp/work/" + timestamp + ".xcf" pdb.gimp_xcf_save(0,img,layer,out_path,out_path) gimp.message("ファイル保存しました。: " + out_path) pdb.gimp_displays_flush()
/tmp/work
配下に現在日時でyyyymmddHHMMSS.xcf
ファイルが出力される。
所感
これをCLIで実行したい。いちいちGIMPのpython-fuから実行するの面倒。
対象環境
- Raspbierry pi 4 Model B
- Raspbian buster 10.0 2019-09-26 ※
- bash 5.0.3(1)-release
- GIMP 2.10.8
$ uname -a Linux raspberrypi 4.19.75-v7l+ #1270 SMP Tue Sep 24 18:51:41 BST 2019 armv7l GNU/Linux