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

Мне нужно сравнить результаты алгоритмов сегментации, где нужно сложить много изображений - например, оригинальное и двоичное изображение. Поэтому я подумал о скрипте GIMP, который берет имя каталога и помещает все содержащие файлы изображений в слои, чтобы их можно было включать и выключать в GIMP для сравнения результатов. Как этого добиться с GIMP? Спасибо за ваши советы!

С уважением

2 ответа

Я только что понял, что команда "файл" > "открыть как слои" в gimp 2.8 выполняет аналогичную работу!

"Не со сценарием". Но Python подходит для ваших нужд. Это простой скрипт - основная логика должна состоять из 4 строк или около того, поэтому я просто напишу это здесь для вас:

#!/usr/bin/python
# -*- coding: utf-8 -*-

from gimpfu import *
import os

def load_images_in_dir(image, drw, path):

    for filename in os.listdir(path):
        try:
            if filename.lower().split(".")[-1] in ("png", "jpg"):
                #import pdb as debug; debug.set_trace()
                image_id, layer_ids = pdb.gimp_file_load_layers(image,
                     os.path.join(path, filename))
                for id in layer_ids:
                    new_layer = gimp.Item.from_id(id)
                    pdb.gimp_image_add_layer(image, new_layer, 0)
        except Exception, error:
            print error



register(
        "open_images_in_dir",
        "Open all files in a directory",
        "Open all files in a directory",
        "Joao S. O. Bueno",
        "Joao S. O. Bueno",
        "2012. Creative Commons Citation Needed license",
        "Open Images in Dir as Layers...",
        "*",
        [(PF_IMAGE, "image", "the image", None),
         (PF_DRAWABLE, "drw", "the drawable", None),
         (PF_DIRNAME,"path", "Directory to Open", "."),],
        [],
        load_images_in_dir,
        menu="<Image>/File/")

main()

Обратите внимание, что вторая часть кода - это просто шаблон для регистрации функции. На самом деле - вызов "gimp_file_load_layers" не работает должным образом - так как он возвращает список идентификаторов объектов, которые не должны быть похожими на Python, но вызов метода "Item.from_id" позволяет обойти это неудобство. Это доступно только в gimp-2.8, хотя

Чтобы заставить это работать в gimp 2.6, вам придется прибегнуть к открытию файла в новом изображении, и они скопируют один или несколько слоев в целевое изображение.

Скопируйте приведенный выше скрипт в каталог плагинов GIMP (например, в *nix, ~/.gimp-2.8/plug-ins - или проверьте папки edit->prerencers-> в GIMP для папки плагинов) - и пометить его как исполняемый.

Другие вопросы по тегам