1

我在重写 GIMP 中的默认徽标脚本之一时遇到问题(使用基于方案的 Script-fu)。一方面,在显示图像后,图层浏览器中不会显示 alpha 图层。我正在重写 Create Neon Logo 脚本(neon-logo.scm),我希望它在显示新图像之前执行以下操作:

  1. 添加 Alpha 通道
  2. 通过 colortoalpha 将黑色(背景颜色)更改为透明
  3. 将生成的图像作为要在另一个 python 脚本中使用的对象返回(使用 for 循环生成 49 个图像)我尝试将以下代码修改为默认脚本:

        (gimp-image-undo-disable img)
        (apply-neon-logo-effect img tube-layer size bg-color glow-color shadow) *Generates neon logo
        (set! end-layer (car (gimp-image-flatten img))) *Flattens image
        (gimp-layer-add-alpha end-layer) *Adds alpha layer as last layer in img(img=the image)
        (plug-in-colortoalpha img 0 (255 255 255)) *Uses color to alpha-NOT WORKING
        (gimp-image-undo-enable img) *Enables undo
        (gimp-display-new img) *Displays new image
    

对于数字 3,我的 python 代码是这样的:

        for str1 in list1:
            for color1 in list3:
                img = pdb.script_fu_neon_logo(str1,50,"Swis721 BdOul BT",(0,0,0),color1,0)

但 img 是一个“Nonetype”对象。我想这样做,而不是在新窗口中显示生成的图像,它只返回生成的图像以用于我的 python 脚本。任何人都可以帮忙吗?

4

1 回答 1

1

也许为了让一切更易于管理和可读,您应该将原始脚本翻译成 Python - 这样您就不会对变量赋值、从序列中挑选元素等其他琐碎的事情感到惊讶。

1和2)您的调用显然是正确的,可以将“添加一个alpha通道”(不是“alpha层”,正如你写的那样)展平到图像上——但是你调用color-to-alpha来制作白色(255 255 255)透明不是黑色的。Trey 将其更改为 (0 0 0) - 如果它不起作用,请在 script-fu 控制台或 python 控制台上单独进行每个调用,并检查有什么问题。

3) Script-fu 不能将值返回给调用者(这可以通过寄存器调用没有“返回值类型”参数来看出。这意味着 GIMP 中的方案中的脚本只能在自身上呈现 thigns 而不是用于组成更复杂的链。

这给您留下了 2 个选项:将原始脚本移植到 Python-fu(他们只需注册它以返回 PF-IMAGE) - 或者像这样在 Python 中绕过调用:创建一个打开所有图像的集合,调用你的script-fu,检查您当前打开的图像中有哪些不在先前打开的图像集中 - 这将是您的新图像:

棘手的部分是:当你从 Python-fu 中看到图像时,它没有唯一的标识符——所以你必须组合一个像 (name, number_of_layers, size) 这样的值来进行这些比较集,甚至那个可能还不够——或者你可能会处理“寄生虫”(可以附加到图像的任意数据)。如您所见,最好用 Python 重写原始 script-fu,因为所有工作都由 PDB 调用完成,并且这些转换 1:1 是可取的。

于 2013-03-18T12:25:35.717 回答