这是我第一次涉足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通道。
我查看了我正在使用的转换步骤的文档,但无法弄清楚发生了什么;非常感谢帮助。
答案 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