【问题标题】:Batch generate height map from images从图像批量生成高度图
【发布时间】:2016-11-01 12:11:14
【问题描述】:

我有很多很多 .png 文件,我正在寻找一种方法来为每个文件生成高度图(或法线图)。我可以从 gimp normalmap 插件中获得我想要的结果,但我需要一种方法来自动化该过程或替代工具。我对重现它们的底层算法知之甚少,对 cg 也知之甚少。有没有图书馆或工具可以做到这一点?只要 api/接口足够高级,我对语言并不挑剔,尽管开源更好,因为我目前无法使用花哨的软件。谢谢!

【问题讨论】:

    标签: graphics gimp


    【解决方案1】:

    您可以为此编写 GIMP 脚本。 我不知道你说的是哪个插件“法线贴图”——或者你所说的“高度图”是什么意思(我知道的高度图只是图像的灰度版本)——但即使它是第三方插件——中,应该可以通过脚本接口运行。

    只需转至plug-ins-> Python-FU->console - 您将进入 Python 提示符。单击“浏览”按钮 - 然后找到您要调用的插件。如果单击“应用” - 浏览器会将插件调用的模板粘贴到 Python 提示符。

    所以,在此之前,您可能需要测试调用:打开一个示例图像,转到 Python 提示符,然后通过键入以下内容获取对图像的引用: image = gimp.image_list()[0],然后输入drawable = image.layers[0] 获取对图像第一层的引用。

    这些应该是插件调用需要预先创建的所有数据。执行上述操作,在提示符处粘贴对所需插件的调用。请注意,上面的名称 imagedrawable 只是变量名称 - 您可以选择自己的名称 - 但这些名称通常是在您从“浏览”按钮中选择“应用”以进行过程调用时预先填写的名称.

    一旦你开始工作到这里,你可以利用 Python 打开文件夹中的所有图像,应用插件,然后将它们保存回来 - 你可以直接在控制台上输入这个,或者稍后,创建将显示在菜单中的插件。

    import os
    for filename in os.listdir('mydir'):
        if not filename.endswith('.png'): continue
        name = 'mydir/' + filename
        image = pdb.gimp_file_load(name, name)
        pdb.plug_in_bump_map(......)  # use your plug-in here
        outputname = 'mydir/' + name.split('.')[0] + '_normal.png'
        pdb.gimp_file_save(image, image.layers[0], outputname, outputname)
        pdb.gimp_image_delete(image)  # just frees the image from memory.
    

    只需按两次,整个文件夹的序列就会运行。 (注意,如果你想运行“bump-map”插件,有几个参数必须从变量名替换为你想要的实际值)。

    如果这是您想要的,并且您会经常使用它,请将其保存为 .py 文件,并将该代码放入适当的函数中以将其转换为插件 - 在我的回答中有一个填充示例:

    GIMP: Create image stack from all image files in folder

    【讨论】:

    • 谢谢你,也感谢你意识到我真正需要的东西:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-08
    相关资源
    最近更新 更多