GIMP:从文件夹中的所有图像文件创建图像堆栈

时间:2012-06-12 14:28:26

标签: image-processing gimp script-fu

我需要比较需要堆叠大量图像的分割算法的结果 - 例如原始和二进制图像。所以我想到了一个GIMP脚本,它取一个目录的名称,并将所有包含图像文件放入图层,以便在GIMP中打开和关闭它们以比较结果。 如何用GIMP实现这一目标? 感谢您的提示!

此致

2 个答案:

答案 0 :(得分:4)

“不使用script-fu”。但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”不能正常工作 - 因为它返回一个对象“id”的列表,这些对象的目的不是来自Python - 但是对“Item.from_id”方法的调用允许人们绕过这个不方便。这仅适用于gimp-2.8,但

要在gimp 2.6中使用此功能,您将不得不求助于在新图像中打开文件,并将图层复制到目标图像。

将上面的脚本复制到GIMP的插件目录(例如,在* nix,〜/ .gimp-2.8 /插件下 - 或检查GIMP中的edit-&gt; prerencers-&gt;文件夹中的插件 - 在文件夹中) - 并将其标记为可执行文件。

答案 1 :(得分:3)

我刚刚意识到命令“文件”&gt;在gimp 2.8中“以层为单位”也做了类似的工作!