我正试图以不同的格式自动创建GIMP映像的副本,以便在网站上提供它们(使用图片元素,为兼容性提供多个版本的图像)。因此,我一直在尝试构建一个脚本来实现这一点,这样我就不必手动导出每个映像,并且允许自己为图像定义自己的默认设置。
到目前为止,我已经能够拼凑出一个脚本来完成我的大部分目标:
(define (hugo-image-processing filename)
(
let* (
(image (car (gimp-file-load 1 (string-append filename ".xcf") (string-append filename ".xcf"))))
(drawable (car (gimp-image-get-active-layer image))))
(file-png-save-defaults 1 image drawable (string-append filename ".png") (string-append filename ".png"))
(file-heif-av1-save 1 image drawable (string-append filename ".avif") (string-append filename ".avif") 100 1)
(file-webp-save 1 image drawable (string-append filename ".webp") (string-append filename ".webp") 0 1 100 100 1 1 1 1 0 0 0 1 1)
(gimp-image-delete image)
)
)这是可行的,而且图像是以预期格式导出的,但我注意到输出文件的大小根据图像保存的顺序而不同。在上面的例子中,我的测试映像以139 kB的AVIF文件的形式导出,而我的WebP文件的重量为76 kB。如果我交换顺序,并在WebP文件之后保存AVIF文件,那么WebP文件仍然包含76 kB,但是现在AVIF文件的大小是58 kB。
如果移动文件-png-保存-默认值(尽管WebP按任何顺序保持一个一致的76 kB ),则可以看到这种行为。
我猜想文件保存命令正在修改图像或绘图,但我还没有完全弄清楚原因。我对Scheme不是很熟悉,所以除了观察到这个行为之外,我解决这个问题的能力是有限的。如能就这一问题提供任何投入,将不胜感激。
我运行这个命令gimp-2.10 -i -b "(hugo-image-processing \"working\")" -b "(gimp-quit 0)"来调用脚本,并且在Windows 11上使用GIMP2.10.30。
发布于 2022-04-02 20:22:49
根据注释,问题似乎来自file-webp-save调用中虚假的“另存为动画”标志。可能是2.10.30中的一个bug,即使使用动画标志,也无法在2.10.24中复制。
我用以下代码测试了这个问题:
def fullname(name,extension):
return "/tmp/"+name+"."+extension
def savemulti(image):
xcf=fullname(image,"xcf")
png=fullname(image,"png")
avif=fullname(image,"avif")
webp=fullname(image,"webp")
image=pdb.gimp_file_load(xcf,xcf)
drawable=image.active_layer
pdb.file_png_save_defaults(image,drawable,png,png)
pdb.file_webp_save(image,drawable,webp,webp,0, 1, 100, 100,1, 1, 1, 1, 0, 0, 0, 1, 1)
pdb.file_heif_save(image,drawable,avif,avif,100,1)
gimp.Display(image) # Start an image window(在结束时启动带有图像的Gimp窗口,而不是删除图像)。
编辑fullname(...)函数后,复制粘贴到python控制台,并以savemulti("TestImage")形式调用。当窗口出现时,您可以检查图层列表,看看是否有额外的图层.
https://stackoverflow.com/questions/71713349
复制相似问题