在同一脚本中使用 GIMP 的批处理脚本以多种格式导出图像的最佳方式?
Best way to export an image in multiple formats using GIMP's batch scripting in the same script?
我正在尝试自动创建不同格式的 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。如果我交换顺序,将 AVIF 文件保存在 WebP 文件之后,WebP 文件仍然包含 76 kB,但 AVIF 文件现在大小为 58 kB。
如果移动 file-png-save-defaults 也可以看到此行为(尽管 WebP 在任何顺序下都保持一致的 76 kB)。
我猜文件--保存命令正在修改图像或可绘制对象,但我还不太明白为什么。我对 Scheme 不是很熟悉,所以除了观察这种行为之外,我解决这个问题的能力是有限的。对此问题的任何意见将不胜感激。
我 运行 这个命令 gimp-2.10 -i -b "(hugo-image-processing \"working\")" -b "(gimp-quit 0)"
调用脚本,我在 Windows 11.
上使用 Gimp 2.10.30
根据评论,问题似乎来自 file-webp-save
调用中的虚假“另存为动画”标志。可能是 2.10.30 中的错误,我无法在我的 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 window,其中包含图像而不是删除图像)。
Copy-paste 在 python-fu 控制台中,编辑 fullname(...)
函数后,调用 savemulti("TestImage")
。当 windows 出现时,您可以检查图层列表,看看是否有额外的图层...
我正在尝试自动创建不同格式的 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。如果我交换顺序,将 AVIF 文件保存在 WebP 文件之后,WebP 文件仍然包含 76 kB,但 AVIF 文件现在大小为 58 kB。
如果移动 file-png-save-defaults 也可以看到此行为(尽管 WebP 在任何顺序下都保持一致的 76 kB)。
我猜文件--保存命令正在修改图像或可绘制对象,但我还不太明白为什么。我对 Scheme 不是很熟悉,所以除了观察这种行为之外,我解决这个问题的能力是有限的。对此问题的任何意见将不胜感激。
我 运行 这个命令 gimp-2.10 -i -b "(hugo-image-processing \"working\")" -b "(gimp-quit 0)"
调用脚本,我在 Windows 11.
根据评论,问题似乎来自 file-webp-save
调用中的虚假“另存为动画”标志。可能是 2.10.30 中的错误,我无法在我的 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 window,其中包含图像而不是删除图像)。
Copy-paste 在 python-fu 控制台中,编辑 fullname(...)
函数后,调用 savemulti("TestImage")
。当 windows 出现时,您可以检查图层列表,看看是否有额外的图层...