редактирование нескольких сотен изображений - GIMP

Я работаю над проектом, который требует от меня изменить несколько сотен изображений (где-то около 550). Они все одного размера и типа. Каждое изображение нуждается в нескольких цветокоррекциях. Сначала я использую замену цвета для верхних 50 пикселей, затем применяю оттенок 360 к нижней части, затем заменяю несколько оттенков полученного цвета на белый. Есть несколько отдельных файлов, которые мне нужно изменить еще больше, но гораздо меньше, чем общий объем. Это тонна работы, чтобы открыть каждое отдельное изображение и выполнить движения. Есть ли способ применить одни и те же методы к нескольким изображениям одновременно? Это значительно снизит мою нагрузку.

Это мой первый пост здесь, поэтому, если это неправильный синтаксис для вопросов, сообщите мне, и я отредактирую этот пост, чтобы он соответствовал любому необходимому формату. Я пытался гуглить, и я не могу найти ответ. Спасибо!

Есть несколько пакетных плагинов, созданных для GIMP. Вы можете проверить BIMP. Плагин пакетной обработки изображений. . На первый взгляд кажется, что это можно сделать только со всем изображением, а не с его частями.
Это либо сценарий GIMP, либо вы можете рассмотреть ImageMagick или GraphicsMagick.

Ответы (1)

Как указано в комментарии, это рабочая нагрузка, которая потребует написания сценариев GIMP, хотя это можно сделать более или менее интерактивным способом (поскольку отдельные изображения требуют отдельной обработки, что действительно может понадобиться).

Если вы проверите Filters->Python->Console, вы получите интерактивную консоль Python, из которой вы можете взаимодействовать с GIMP — и если вы хотите решение, которое будет добавлять новые функции (возможно, просто компонуя некоторые существующие операции) в меню, вам придется написать подключаемый модуль. в.

Написание плагинов Python может быть проще, чем кажется — вы используете интерактивный режим, чтобы определить вызовы GIMP, которые вам понадобятся для вашего изображения, и оберните их 4 строками стандартного кода, который вы можете копировать, вставлять и адаптировать из любого существующего. плагины

Документы для плагинов находятся здесь : http://www.gimp.org/docs/python/ 16020158/gimp-python-плагин

Ключ к тому, чтобы сделать это продуктивным для вас (и при> 500 изображениях, я считаю, что это, безусловно, будет стоить вашего времени), если минимально ознакомиться с основами Python - если вы ничего не знаете о кодировании - вы можете следовать учебник с https://docs.python.org/2/tutorial/index.html (он будет работать прямо из консоли GIMP Python) - пока вы не поймете "переменные", "циклы for" и "функции" - нет необходимости идти гораздо дальше. И второй ключ — нажать кнопку «Обзор» в нижней части диалогового окна консоли GIMP — это позволит вам искать среди сотен доступных вызовов для работы с изображениями, открытыми в GIMP. (Просто нажмите кнопку «Применить», чтобы ввести вызов функции на консоли для вас).

Некоторые из этих вызовов сделать просто — другие потребуют от вас немного проб и ошибок, чтобы вы заработали.

Чтобы получить доступ к открытому (самому правому) изображению GIMP из консоли Python, введите:

img = gimp.image_list()[0]

(нажмите <enter>потом)

С этого момента имя «img» является ссылкой на изображение и может быть передано в вызовы — например, чтобы оживить самый верхний слой, вы можете ввести (или нажать «Обзор», выполнить поиск «яркий», выбрать соответствующую функцию, нажмите «применить» и отредактируйте строку, пока она не будет читать :)

pdb.gimp_drawable_brightness_contrast(img.layers[0], 0.2, 0)

( img.layersпредставляет собой последовательность Python, содержащую все слои верхнего уровня. Индексация [0] выбирает самый верхний слой, [1] — второй и так далее.)

Теперь предположим, что вы хотите раскрасить 550 (или тысячи) изображений «.png», лежащих в одном каталоге, и сохранить их во втором каталоге — вы используете мощь языка Python для работы с именами файлов и строками, и эти вызовы GIMP PDB:

Просто введите строки ниже, следуя отступу, и дважды нажмите Enter в конце (чтобы Python знал, что вы хотите выйти из цикла for): (# указывает на комментарии, не нужно вводить то, что следует за ними)

import glob
source_folder = "c:/mysource_image_folder/" #type your folder inside the quotes - append the final "/"
dest_folder = "c:/destination_folder/"
for filename in glob.glob(source_folder  + "/*.png"):
    img = pdb.gimp_file_load(source_folder + filename, source_folder + filename)
    pdb.gimp_drawable_brightness_contrast(img.layers[0], 0.2, 0)
    pdb.gimp_file_save(img, img.layers[0], dest_folder + filename, dest_folder + filename)
    pdb.gimp_image_delete(img)  # drops the image from gimp memory

И это все. Чтобы автоматизировать больше шагов, просто добавьте соответствующие вызовы перед вызовом «сохранить». Чтобы отобразить открытое изображение, вызовите d = pdb.gimp_display_new(img)(и соедините его с вызовом pdb.gimp_display_delete(d)call перед calling gimp_image_delete.

Поскольку вы хотите выполнять автоматизированные задачи, взаимодействовать с изображением, сохранять их и переходить к следующему — из-за технической проблемы в консоли GIMP (функция Python «ввода» не работает — пауза, пока вы не нажмете ввод), я предложите следующий хак - все еще работает над примером выше:

import glob.glob
source_folder = "c:/mysource_image_folder/" #type your folder inside the quotes - append the final "/"
dest_folder = "c:/destination_folder/"

def auto(source_folder, dest_folder):
    for filename in glob(source_folder  + "/*.png"):
        img = pdb.gimp_file_load(source_folder + filename, source_folder + filename)
        # palce calls to draw on the image before your interation here
        disp = pdb.gimp_display_new(img)
        yield img
        pdb.gimp_image_merge_visible_layers(img, CLIP_TO_IMAGE)
        pdb.gimp_file_save(img, img.layers[0], dest_folder + filename, dest_folder + filename)
        pdb.gimp_display_delete(disp)
        pdb.gimp_image_delete(img)  # drops the image from gimp memory

seq = auto(source_folder, dest_folder)
next(seq)

(и каждый раз, когда вы вводите next(seq)(за которым следует <enter>), gimp будет сохранять открытое в данный момент изображение, удалять его, открывать и предварительно обрабатывать следующее и делать паузу в том месте, где вам нужно вручную возиться с ним) (обратите внимание, что стрелка вверх приводит к next(seq)ответный текст)

Обратите внимание, что вы можете просто скопировать приведенный выше фрагмент, вставить в редактор, подходящий для программирования (если его нет, для этого подойдет блокнот Windows) - настроить параметры (каталог и имена файлов) и вставить скрипт прямо в консоль GIMP Python)

update Я последовал этому ответу на SO, написав полноценный плагин с примером, который я начал здесь: https://stackoverflow.com/questions/30302494/can-i-create-a-script-for-gimp-to- выполнение ряда процессов/30398245#30398245