Скрипт GIMP Script.Fu для пакетного преобразования JPEG в PNG

Может ли кто-нибудь дать мне сценарий, который мне нужно запустить для пакетного преобразования многих файлов *.jpeg в *.png в Script.Fu в GIMP?

В настоящее время я трачу слишком много времени на экспорт каждого изображения вручную, и это пустая трата времени.

Я не могу ничего установить прямо сейчас, поэтому не могу использовать альтернативные приложения.


person Elizabeth    schedule 07.02.2018    source источник
comment
Пожалуйста, прочитайте При каких обстоятельствах я могу добавить «срочно» или другие подобные фразы к моему вопросу, чтобы получить более быстрые ответы? - Подводя итог, можно сказать, что это не идеальный способ обращения к волонтерам и, вероятно, контрпродуктивно для получения ответов. Пожалуйста, воздержитесь от добавления этого к своим вопросам.   -  person halfer    schedule 07.02.2018


Ответы (2)


Реальное решение состоит в том, чтобы использовать преобразование ImageMagicks, такое простое, как magick convert some.jpeg some.png. Где-то должна быть «портативная» версия, которую можно использовать с USB-накопителя.

В противном случае с Gimp гораздо менее ручной способ, который не требует нового сценария, поскольку он использует существующий сценарий:

  • получить/установить ofn-export-layers
  • File>Open первый JPEG
  • File>Open as layers больше изображений в формате JPEG. Вы можете выбрать несколько/все jpeg за один вызов (фактическое количество в основном ограничено доступной оперативной памятью). Как только это будет сделано, у вас будет много Jpeg-файлов, сложенных в одно и то же изображение.
  • File>Export all layers, убедившись, что используемый вами шаблон имени заканчивается на .png (в документе, прилагаемом к сценарию, объясняется, как это работает).
person xenoid    schedule 07.02.2018
comment
Спасибо. К сожалению, это мне не помогло, так как мне нужно было сохранить все файлы с их исходными именами. Эти имена должны быть идеальными, и я, конечно, не хочу их вводить. Я рассмотрю портативную версию ImageMagicks, но, поскольку мое использование контролируется, я действительно не хочу создавать проблемы, поэтому GIMP был бы предпочтительнее. - person Elizabeth; 22.02.2018
comment
С помощью File>Open as layers слои называются в соответствии с их исходным изображением. В ofn-export-layers вы устанавливаете шаблон сохранения на {name}.png, чтобы слои сохранялись с их именем слоя/источника, в котором jpg заменено на png. Другими словами: файл covfefe.jpg загружается как слой с именем covfefe.jpg, который неэкспортируемые слои будут сохранены как covfefe.png в каталоге по вашему выбору. (*) Используйте обновленную сегодня версию (v0.1), параметр {name} в предыдущей версии действовал немного иначе. И да, он сохраняет изображения в исходном размере, они не обрезаются до размера холста. - person xenoid; 22.02.2018
comment
Спасибо. Итак, мне нужно было сделать еще одну партию, но скрипт не отображается в меню «Файл», как должен. Любое понимание того, как это исправить? - person Elizabeth; 16.03.2018
comment
Хотя это выглядит как скрипт, технически для Gimp это плагин, поэтому он должен располагаться в каталоге plug-ins, а не в каталоге scripts. Перезапустите Gimp, чтобы это было учтено. - person xenoid; 16.03.2018
comment
К сожалению, мне придется добавлять плагины и т. д. каждый раз, когда они мне понадобятся, но в остальном это работает! Большое спасибо. Выбор каталога неуклюж и по умолчанию не соответствует тому же каталогу, из которого были получены файлы, но все же это лучше, чем экспортировать снова и снова. - person Elizabeth; 03.04.2018
comment
Я думаю, вы можете изменить настройки ярлыка Windows Gimp, чтобы он запускался в заданном каталоге (рабочем каталоге), в этом случае он станет каталогом по умолчанию для сохранения файлов. - person xenoid; 03.04.2018

Хорошо, после множества проб и ошибок я наконец понял, как преобразовать один формат файла в другой, используя только GIMP.

Это скрипт Script-Fu для преобразования в PNG:

(
    let* ((filename "{{filename}}")
            (output "{{output}}")
            (image (car (gimp-file-load 1 filename filename)))
            (drawable (car (gimp-image-get-active-layer image))))
    (file-png-save-defaults 1 image drawable output output)
)

Где {{filename}} — это входной файл, который необходимо преобразовать (например, файл jpeg), {{output}} — это выходной файл, который вам нужен (это может быть просто то же имя файла, но с расширением PNG)

Как запустить: вероятно, его можно улучшить

gimp -i -n -f -d --batch "{{one-line script-fu}}"

Подробнее об опциях командной строки вы можете узнать в онлайн-документации GIMP.

Место, которое нужно изменить, это {{one-line script-fu}}, и оно должно быть... однострочным! Вы можете наверное сделать все это в одном файле с помощью cmd (в случае, если вы используете Windows), но мне было проще использовать Python, поэтому вот скрипт для него:

import subprocess, os

def convert_to_png(file_dds):
    #Loads the command to run gimp cli (second code block)
    #Note: remove "{{one-line script-fu}}" and leave one space after the --batch
    with open("gimp-convert.bat", "r") as f:
        main_script = f.read()

    #Prepares the Script-Fu script to be run, replacing necessary file names and makes it one-line (the firs code block)
    with open("gimp-convert-png.fu", "r") as f:
        script = f.read().replace("\n", " ").replace("{{filename}}", file_dds) \
            .replace("{{output}}", file_dds[:-3]+"PNG").replace("\\", "\\\\").replace("\"", "\\\"")

    subprocess.run(main_script + " \"" + script + "\" --batch \"(gimp-quit 1)\"",
        cwd = os.getcwd(),
        shell = True)

И вы должны преобразовать свой файл в PNG!

Мне это было нужно для моего проекта масштабирования текстур, весь приведенный ниже код вы можете найти здесь .

Протестировано с GIMP 2.10

person OSA413    schedule 08.07.2021