Пакетное преобразование из XCF версии 11 - PullRequest
0 голосов
/ 16 июня 2019

У меня есть папка с изображениями, сохраненными в формате .xcf, и я хотел бы конвертировать их в более удобный формат.Я пробовал несколько подходов, которые не работали:

  • Я использовал это, используя IrfanView, но это больше не работает, потому что он отказывается открывать последнюю версию файлов .xcf.

  • Я пытался использовать IMageMagick mogrify и convert, но они оба дают мне «распределение памяти не удалось» - возможно, они также не понимают новый формат?

  • Я попробовал инструмент командной строки xcf2png, и он выдает мне сообщение «Предупреждение: XCF версии 11 не поддерживается (в любом случае ...)» перед созданием пустого образа.

Моя последняя надежда - написать скрипт пакетного преобразования, который будет работать в самой последней версии Gimp, но у меня нет опыта работы с ScriptFu.Я нашел скрипт, который конвертирует некоторые другие типы файлов (http://beefchunk.com/documentation/lang/gimp/GIMP-Scripts-Fu.html#convertjpg-script-fu), но не обладает достаточными знаниями для его изменения. Кто-нибудь знает правильные вызовы / аргументы для чтения xcf и записи png?

1 Ответ

2 голосов
/ 16 июня 2019

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) меняет местами простые и двойные кавычки.
  • Как написано, скрипт должен находиться в текущем каталоге, это можно изменить.

Еще несколько объяснений здесь .

...