从XCF 11版进行批量转换

时间:2019-06-16 02:28:31

标签: imagemagick script-fu irfanview xcf

我有一个以.xcf格式保存的图像文件夹,我想将其批量转换为更方便的格式。我尝试了一些无效的方法:

  • 我曾经使用IrfanView来执行此操作,但由于它拒绝打开最新版本的.xcf文件,因此不再起作用。

  • 我尝试使用IMageMagick进行迁移和转换,但是它们都给我“内存分配失败”-也许他们也不了解新格式?

  • 我尝试了xcf2png命令行工具,并在创建空图像之前给了我消息:“警告:不支持XCF 11版(无论如何尝试...)”。

我最后的希望是编写一个可以在Gimp的最新版本中使用的批处理转换脚本,但是我对ScriptFu没有任何经验。我找到了一个可以转换其他文件类型(http://beefchunk.com/documentation/lang/gimp/GIMP-Scripts-Fu.html#convertjpg-script-fu)的脚本,但是还不具备修改它的知识。有人知道正确的调用/参数来读取xcf和写入png吗?

2 个答案:

答案 0 :(得分:2)

Gimp脚本,为作为参数传递的目录中的每个.XCF制作一个.PNG

#!/usr/bin/python

import os,glob,sys,time
from gimpfu import *

def process(infile):
        print "Processing file %s " % infile
        image = pdb.gimp_xcf_load(0,infile,infile)
        print "File %s loaded OK" % infile
        # The API saves a layer, so make a layer from the visible image
        savedlayer = pdb.gimp_layer_new_from_visible(image,image,"Saved image")
        outfile=os.path.splitext(infile)[0]+'.png'
        print "Saving to %s" % outfile
        pdb.file_png_save(image,savedlayer,outfile, outfile,True,9,True,True,True,True,True)
        print "Saved to %s" % outfile
        pdb.gimp_image_delete(image)


def run(directory):
        start=time.time()
        print "Running on directory \"%s\"" % directory
        for infile in glob.glob(os.path.join(directory, '*.xcf')):
                process(infile)
        end=time.time()
        print "Finished, total processing time: %.2f seconds" % (end-start)


if __name__ == "__main__":
        print "Running as __main__ with args: %s" % sys.argv
  • 另存为convertXCF.py(这是Python,请注意缩进)
  • 运行方式:
gimp -idf --batch-interpreter python-fu-eval -b "import sys;sys.path=['.']+sys.path;import convertXCF;convertXCF.run('/path/to/the/directory')" -b "pdb.gimp_quit(1)"
  • Windows .BAT语法,用于Bash(Linux,OSX)交换单引号和双引号。
  • 按照书面规定,脚本必须位于当前目录中,可以更改。

更多说明here

答案 1 :(得分:0)

这是一个自包含的bash脚本,应将当前目录中的所有xcf文件转换为png格式的副本。它应该可以在安装了Gimp的任何Linux计算机上运行。它不需要在脚本目录中进行任何安装:

#!/bin/bash
# xcfs2png.sh
# Invoke The GIMP with Script-Fu convert-xcf-png
# No error checking.
{
cat <<EOF
(define (convert-xcf-png filename outpath)
    (let* (
            (image (car (gimp-xcf-load RUN-NONINTERACTIVE filename filename )))
            (drawable (car (gimp-image-merge-visible-layers image CLIP-TO-IMAGE)))
            )
        (begin (display "Exporting ")(display filename)(display " -> ")(display outpath)(newline))
        (file-png-save2 RUN-NONINTERACTIVE image drawable outpath outpath 0 9 0 0 0 0 0 0 0)
        (gimp-image-delete image)
    )
)

(gimp-message-set-handler 1) ; Messages to standard output
EOF

for i in *.xcf; do
  echo "(convert-xcf-png \"$i\" \"${i%%.xcf}.png\")"
done

echo "(gimp-quit 0)"

} | gimp -i -b -

在Kubuntu 20.04上测试了使用Gimp v2.10.18的能力。 感谢pixls.us的patdavid提供的原始脚本。