为什么这些脚本化的gimp图像修改没有被保留?

时间:2016-07-17 02:16:29

标签: gimp

这是我第一次涉足gimp脚本,我似乎有一些基本的误解。我编写了以下代码,用于将白色转换为指定文件中的透明度,并将结果导出为png文件:

(define (edit-name original-name)
  (let* ((pos (- (string-length original-name) 4))
    (suffix (substring original-name pos))
    (prefix (substring original-name 0 pos))
    (new-name (string-append prefix ".png")))
    new-name))

(define (my-process filename)
    (let* ((color '(0 0 0))
           (image (car (gimp-file-load RUN-NONINTERACTIVE filename filename)))
           (drawable (car (gimp-image-get-active-layer image)))
           (filename-modified (edit-name filename)))
        (if (not (gimp-drawable-is-rgb drawable))
            (gimp-image-convert-rgb image))
        (plug-in-colortoalpha RUN-NONINTERACTIVE image drawable color)
        (file-png-save2 RUN-NONINTERACTIVE image drawable filename-modified filename-modified 0 9 1 1 1 1 1 0 1)))

此脚本保存在文件~/.gimp-2.8/scripts/my-process.scm中,并使用以下命令调用:

gimp -i -b '(my-process "somefile.xcf")' -b '(gimp-quit 0)'

脚本似乎正在运行,我在控制台上输出batch command executed successfully。此外,如果我在脚本中添加了明显的语法或参数错误,那么我会收到错误。我还尝试在rgb转换后重新获取drawable,以防转换产生不同的对象。我也尝试使用file-png-save-defaults代替file-png-save2,但无济于事。

但是,我得到的输出是索引颜色模式(源图像的原始模式)中的简单png导出,它不包含alpha通道。

我查看了我正在使用的转换步骤的文档,但无法弄清楚发生了什么;非常感谢帮助。

1 个答案:

答案 0 :(得分:2)

这对我有用(这是你的Python代码,使用相同的调用):

image=gimp.image_list()[0]
layer=image.active_layer
print "Type before:",pdb.gimp_drawable_type(layer) 
pdb.gimp_image_convert_rgb(image)
print "Type after:",pdb.gimp_drawable_type(layer) 
print "Has alpha after:",pdb.gimp_drawable_has_alpha(layer)
pdb.plug_in_colortoalpha(image,layer,(0,0,0))
pdb.file_png_save2(image,layer,'/tmp/foo.png','/tmp/foo.png',0,9,1,1,1,1,1,0,1)

输出是(你可以直接在Python控制台中粘贴上面的内容):

>> image=gimp.image_list()[0]
>>> layer=image.active_layer
>>> print "Type before:",pdb.gimp_drawable_type(layer) 
Type before: 4
>>> pdb.gimp_image_convert_rgb(image)
>>> print "Type after:",pdb.gimp_drawable_type(layer) 
Type after: 0
>>> print "Has alpha after:",pdb.gimp_drawable_has_alpha(layer)
Has alpha after: 0
>>> pdb.plug_in_colortoalpha(image,layer,(0,0,0))
>>> pdb.file_png_save2(image,layer,'/tmp/foo.png','/tmp/foo.png',0,9,1,1,1,1,1,0,1)

我觉得可疑的是转换后没有alpha通道(类型是RGB_IMAGE而不是RGBA_IMAGE)(这是预期的),但是颜色到alpha的工作没有添加一个。但是,您可以尝试明确添加一个,看看是否会发生变化。

这就是说,使用ImageMagick可以更好地完成Gimp中所有批处理的95%。有关颜色到alpha的信息,请参阅this SO question