Пакетное преобразование из XCF версии 11
У меня есть папка с изображениями, сохраненными в формате.xcf, и я бы хотел конвертировать их в более удобный формат. Я пробовал несколько подходов, которые не сработали:
Раньше я делал это с помощью IrfanView, но это больше не работает, потому что он отказывается открывать последнюю версию файлов.xcf.
Я попытался использовать IMageMagick mogrify и convert, но они оба дают мне "ошибка выделения памяти" - возможно, они также не понимают новый формат?
Я попробовал инструмент командной строки xcf2png, и он выдает мне сообщение "Внимание: XCF версии 11 не поддерживается (в любом случае...)" перед созданием пустого образа.
Моя последняя надежда - написать скрипт пакетного конвертирования, который будет работать в самой последней версии Gimp, но у меня нет опыта работы с ScriptFu. Я нашел скрипт, который конвертирует некоторые другие типы файлов ( http://beefchunk.com/documentation/lang/gimp/GIMP-Scripts-Fu.html), но не совсем умею его изменять, Кто-нибудь знает правильные вызовы / аргументы, чтобы прочитать xcf и написать png?
1 ответ
Gimp скрипт, создает.PNG для каждого.XCF в каталоге, передаваемом в качестве параметра
#!/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. Он должен работать на любом компьютере Linux с установленным GIMP. Не требует установки в каталоги скриптов:
#!/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 -
Проверена работа с Gimp v2.10.18 на Kubuntu 20.04. Спасибо patdavid на pixls.us за оригинальный сценарий.