从 XCF 版本 11 批量转换
Batch convert from XCF version 11
我有一个以.xcf 格式保存的图像文件夹,我想将它们批量转换为更方便的格式。我尝试了一些没有奏效的方法:
我曾经使用 IrfanView 执行此操作,但现在不再有效,因为它拒绝打开最新版本的 .xcf 文件。
我尝试使用 IMageMagick mogrify 和转换,但他们都给了我 "memory allocation failed" -- 也许他们也不理解新格式?
我尝试了 xcf2png 命令行工具,它在创建空图像之前给了我消息 "Warning: XCF version 11 not supported (trying anyway...)"。
我最后的希望是编写一个可以在最新版本的 Gimp 中运行的批量转换脚本,但我对 ScriptFu 没有任何经验。我找到了一个可以转换一些其他文件类型 (http://beefchunk.com/documentation/lang/gimp/GIMP-Scripts-Fu.html#convertjpg-script-fu) 的脚本,但不太了解如何修改它。有人知道calls/arguments读取xcf和写入png的权利吗?
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) 交换单引号和双引号。
- 因为脚本必须在当前目录中,所以可以更改。
更多解释。
这是一个自包含的 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 提供原始脚本。
我有一个以.xcf 格式保存的图像文件夹,我想将它们批量转换为更方便的格式。我尝试了一些没有奏效的方法:
我曾经使用 IrfanView 执行此操作,但现在不再有效,因为它拒绝打开最新版本的 .xcf 文件。
我尝试使用 IMageMagick mogrify 和转换,但他们都给了我 "memory allocation failed" -- 也许他们也不理解新格式?
我尝试了 xcf2png 命令行工具,它在创建空图像之前给了我消息 "Warning: XCF version 11 not supported (trying anyway...)"。
我最后的希望是编写一个可以在最新版本的 Gimp 中运行的批量转换脚本,但我对 ScriptFu 没有任何经验。我找到了一个可以转换一些其他文件类型 (http://beefchunk.com/documentation/lang/gimp/GIMP-Scripts-Fu.html#convertjpg-script-fu) 的脚本,但不太了解如何修改它。有人知道calls/arguments读取xcf和写入png的权利吗?
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) 交换单引号和双引号。
- 因为脚本必须在当前目录中,所以可以更改。
更多解释
这是一个自包含的 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 提供原始脚本。