首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用GIMP的批处理脚本在同一个脚本中以多种格式导出图像的最佳方法?

使用GIMP的批处理脚本在同一个脚本中以多种格式导出图像的最佳方法?
EN

Stack Overflow用户
提问于 2022-04-01 22:31:19
回答 1查看 268关注 0票数 0

我正试图以不同的格式自动创建GIMP映像的副本,以便在网站上提供它们(使用图片元素,为兼容性提供多个版本的图像)。因此,我一直在尝试构建一个脚本来实现这一点,这样我就不必手动导出每个映像,并且允许自己为图像定义自己的默认设置。

到目前为止,我已经能够拼凑出一个脚本来完成我的大部分目标:

代码语言:javascript
复制
(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。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-02 20:22:49

根据注释,问题似乎来自file-webp-save调用中虚假的“另存为动画”标志。可能是2.10.30中的一个bug,即使使用动画标志,也无法在2.10.24中复制。

我用以下代码测试了这个问题:

代码语言:javascript
复制
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")形式调用。当窗口出现时,您可以检查图层列表,看看是否有额外的图层.

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71713349

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档