参考
コード
/tmp/work/out_xcf.py
#!/usr/bin/env python3 # -*- coding: utf-8 -*- 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() pdb.gimp_quit(1)
実行
gimp --no-interface --console-messages --no-data --no-splash --batch-interpreter python-fu-eval --batch - < /tmp/work/out_xcf.py
python-eval.py-警告: ファイル保存しました。: /tmp/work/20191218104743.xcf gimp: GEGL-WARNING: (gegl-tile-handler-cache.c:977):gegl_tile_cache_destroy: runtime check failed: (g_queue_is_empty (&cache_queue)) EEEEeEeek! 3 GeglBuffers leaked
最後に終了処理をつけ加えると以下。
gimp --no-interface --console-messages --no-data --no-splash --batch-interpreter python-fu-eval --batch - < /tmp/work/out_xcf.py -b 'pdb.gimp_quit(1)'
情報源
感謝。
所感
これを突き止めるのに超ググりまくった。公式さんお願いだからまとめてください。
対象環境
- 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