飞码网-免费源码博客分享网站

点击这里给我发消息

使用Python编写GIMP插件 |-Python教程

飞码网-免费源码博客分享网站 爱上飞码网—https://www.codefrees.com— 飞码网-matlab-python-C++ 爱上飞码网—https://www.codefrees.com— 飞码网-免费源码博客分享网站

本文是关于使用GIMP-Python的,这是一组Python模块,允许您在Py​​thon中进行编程以自动执行GNU图像处理程序(GIMP)中的命令。这些Python模块是libgimp库的包装器。GIMP-Python与Script-Fu扩展名不同。在Script-Fu中,插件用于执行脚本。在GIMP-Python中,Python脚本占据了中心位置并完成了工作。您可以从GIMP本身内部实例化GIMP-Python脚本,也可以使用GIMP的批处理模式从命令行启动它。

在本文中,您将学习如何编写Python代码,该代码允许您自动执行GIMP中的两个不同任务:调整图像大小并将其保存为不同格式。

您可以在许多不同的平台上安装和使用GIMP和Python,包括Linux®,MacOS®X和Microsoft®Windows®。GIMP和Python的跨平台性质意味着您可以使用Python为GIMP编写复杂的插件,并能够在各种平台上运行它们。

GIMP概述

GIMP是一个开放源代码的图像处理程序,许多人将其用作某些商业产品的可行替代方案。GIMP处理诸如图层和路径之类的复杂功能。GIMP支持多种不同的图像格式,并带有相对复杂的过滤器。GIMP具有强大的社区支持和参与,因此通常很容易找到有关如何使用或扩展GIMP的信息。

请参阅参考资料部分中的链接,以在计算机上下载并安装GIMP。

Python脚本概述

Python是一种面向对象的脚本语言,可让您编写可在许多不同平台上运行的代码。Python已被移植到.NET和Java™虚拟机上,因此执行Python的方式有很多。请参阅参考资料部分,以了解如何在计算机上安装Python。

Python存在许多模块,这些模块提供了无需编写自己即可重用的功能(GIMP-Python模块就是一个示例)。Python模块的索引列出了许多不同的预构建模块,从处理超文本标记语言(HTML)和超文本传输​​协议(HTTP)连接到使用可扩展标记语言(XML)文件,您可以使用它们完成各种任务。 (请参阅参考资料部分)。您还可以构建自己的Python模块,从而允许在企业内重用部分代码。

与GIMP相似,Python也具有重要的社区支持。这意味着您可以找到信息,以及下载和使用相对成熟的工具来帮助您进行Python开发。

在继续本文的其余部分之前,请根据Python网站上的说明在您的操作系统上安装Python。通过打开命令提示符并键入,确保正确安装了Python python --version结果应该类似于清单1。

清单1.验证Python的安装
$ python --version
Python 2.6.6

安装Python解释器后,您可以在任何文本编辑器中创建Python文件并使用解释器运行它们。您还可以使用Eclipse的PyDev插件,该插件提供语法高亮显示以及其他一些功能,例如为您捕获语法错误。另一个选择是直接在Eclipse中使用Python控制台,这对于寻求帮助很方便。

GIMP-Python模块应该已经与较新版本的GIMP一起安装。要查看它们是否已安装,请打开GIMP,然后查看“过滤器”菜单下是否具有Python-Fu菜单选项。如果您在此处看到该选项,则可以开始编写脚本了。如果看不到该选项,请单击“参考资料”部分中的链接以安装GIMP的Python扩展。

如果要为Eclipse使用PyDev插件,请遵循以下步骤:

  1. 通过选择“帮助”>“安装新软件”来安装PyDev插件
  2. 使用http://pydev.org/updates作为更新站点(请参阅参考资料部分)。
  3. 遵循其余的安装过程,并在完成后重新启动Eclipse。
  4. 重新启动Eclipse之后,选择“文件”>“新建”>“项目”以创建一个新项目。
  5. 选择PyDev \ PyDev项目,然后单击下一步
  6. 输入项目的名称(例如MyPythonGimpPlugins)。
  7. 清除“使用默认值”复选框,并为Python插件输入GIMP目录的位置,如图1所示。
图1.使用用于Eclipse的PyDev插件创建一个新项目

屏幕截图显示了正在创建的MyPythonGimpPlugins项目,项目类型为Python,语法版本2.6,解释器为默认项目

  1. 单击链接以配置解释器。只要您正确安装了Python并且在路径上,自动配置”按钮就应该起作用。

对于您的项目,请确保添加包含GIMP Python模块gimp的文件夹gimpfu通过使用Project> Properties将此目录添加到您的Eclipse项目(但不要将其添加到基本路径),如图2所示。

图2.将GIMP-Python模块目录添加到Eclipse中的项目中

屏幕快照显示PYTHONPATH现在在Eclipse中添加了/usr/lib/gimp/2.0/python

单击PyDev – PYTHONPATH然后选择“外部库”选项卡,然后单击“添加源文件夹”按钮以添加用于安装GIMP Python模块的文件夹。路径将类似于/usr/lib/gimp/2.0/python/。

您还可以在Eclipse中运行Python控制台。在控制台可见的情况下,从控制台列表中选择Pydev控制台

注册脚本

Python文件位于用户的主GIMP文件夹中。在Mac和Linux系统上,该文件夹为〜/ .gimp-2.6 / plug-ins。Python脚本文件也应该是可执行的,并且在第一行具有Python解释器,就像标准脚本声明一样,如清单2所示。

清单2.一个基本的Python脚本,显示“ Hello,world!”
#!/usr/bin/python

print "Hello, world!"

您需要为GIMP注册Python脚本,才能将该插件放入GIMP菜单之一。清单3显示了在GIMP中注册脚本并显示“ Hello,World!”所需的最基本的脚本。调用控制台时。

清单3.在GIMP中注册您的插件
#!/usr/bin/python

from gimpfu import *

def plugin_main(timg, tdrawable):
    print "Hello, world!"

register(
        "python_fu_resize",
        "Saves the image at a maximum width and height",
        "Saves the image at a maximum width and height",
        "Nathan A. Good",
        "Nathan A. Good",
        "2010",
        "<Image>/Image/Resize to max...",
        "RGB*, GRAY*",
        [],
        [],
        plugin_main)

main()

register()方法提供有关您的插件的GIMP信息。

register()方法具有多个参数,这些参数告诉GIMP如何显示该插件的菜单选项,以及从菜单启动该插件时要调用的Python方法。表1显示了该register()方法的参数

表1.register()方法的参数和示例
范围 例子 描述
proc_name python_fu_resize 您可以从命令行或脚本中调用的命令的名称
脱口秀 以最大宽度和高度保存图像 有关在过程浏览器中显示的插件的信息
帮助 以最大宽度和高度保存图像 插件帮助
作者 内森·A·古德 插件的作者
版权 内森·A·古德 插件的版权所有者(通常与作者相同)
日期 2010 版权日期
标签 /图片/调整为最大大小… 插件在菜单中使用的标签
图像类型 RGB ,灰色 插件处理的图像类型
参数 [] 插件方法的参数
结果 [] 插件方法的结果
功能 plugin_main 在您的Python代码中调用的方法的名称

通过打开Python-Fu控制台(单击Filters> Python-Fu> Console)并输入清单4中所示的命令,您可以获得有关register方法的参数的最新信息

清单4.使用Python控制台获取帮助
import gimpfu
help(gimfu.register)

将值放入register方法后,保存脚本。确保它是可执行文件,并且位于.gimp2-6 / plug-ins文件夹中。

保存脚本后,使用gimp命令从命令行启动GIMP 这应该使您能够看到插件打印的所有信息,包括print语句的输出。另外,如果您的插件有任何错误,请在此处查看。

启动GIMP后,转到Image菜单,您可以在其中看到新的Resize to max菜单项,如图3所示。

图3.插件的新菜单项

屏幕截图显示GIMP中“图像”菜单的底部显示“最大调整为最大”。

现在,您的插件已在GIMP上正确注册了自己,并且您可以单击该插件的菜单项,您就可以继续添加Python代码以调整图像大小了。

脚本调整大小

在GIMP中拥有Python插件之后,您可以将实际代码添加到plugin_main插件代码内部方法中。

清单5演示了调整图像大小的代码。

清单5.在plugin_main方法中添加代码
def plugin_main(timg, tdrawable, maxh=500, maxw=500):

    currentWidth = tdrawable.width
    currentHeight = tdrawable.height

    newWidth = currentWidth
    newHeight = currentHeight

    if (maxw < newWidth):
        newWidth = maxw
        newHeight = (float(currentHeight) / (float(currentWidth) / newWidth))

    if (maxh < newHeight):
        newHeight = maxh
        newWidth = (float(currentWidth) / (float(currentHeight) / newHeight))

    pdb.gimp_image_scale(timg, newWidth, newHeight)

Python代码只是pdb.gimp_scale_image在执行一些基本计算以查找缩放后的图像大小的值之后,简单地调用该方法来调整图像的大小。由于输入框中的值是最大值,因此脚本需要检查当前图像的宽度和高度,以查看是否需要限制图像的尺寸。如果任一图像尺寸大于最大尺寸,则将约束尺寸设置为最大尺寸,然后计算另一个尺寸。

要了解可在Python脚本中调用的其他方法的更多信息,请参阅GIMP中的“帮助”>“过程浏览器”该方法的过程浏览器pdb.gimp_image_scale如图4所示。

图4.在过程浏览器中查看gimp-image-scale方法

屏幕截图在左侧显示了一个过程列表,突出显示了gimp-image-scale,在右侧显示了有关该过程的详细信息。

运行调整大小的插件脚本

添加代码以执行调整大小后,请在GIMP中打开一个图像。单击新的图像>调整为最大大小菜单项。您的脚本要求您提供大小,如图5所示。

图5.插件的输入参数

屏幕截图显示了python_fu_resize的参数窗口,其中最大宽度和最大高度的输入都设置为500

当您单击OK时,您的plugin_main方法将执行,并且脚本将调整图像的大小。

编写图像转换脚本

现在,您可以使用该插件来调整图像大小了,您可以更新Python脚本以将图像另存为其他图像格式。这使您可以将原始图像另存为JPEG文件,并调整其大小以适合某些限制。

清单6显示了该脚本的新添加内容。

清单6.添加代码以保存原始图像的JPEG副本
#!/usr/bin/python

from gimpfu import *

def plugin_main(timg, tdrawable, maxh=500, maxw=500, savecopy=TRUE):

    currentWidth = tdrawable.width
    currentHeight = tdrawable.height

    newWidth = currentWidth
    newHeight = currentHeight

    if (maxw > newWidth):
        newWidth = maxw
        newHeight = (float(currentHeight) / (float(currentWidth) / newWidth))

    if (maxh > newHeight):
        newHeight = maxh
        newWidth = (float(currentWidth) / (float(currentHeight) / newHeight))

    pdb.gimp_image_scale(timg, newWidth, newHeight)

    if savecopy:
        pdb.file_jpeg_save(timg, tdrawable, timg.name+".jpg", timg.name+".jpg",
                           0.9, 0, 0, 0, "", 0, 0, 0, 0)

register(
        "python_fu_resize",
        "Saves the image at a maximum width and height",
        "Saves the image at a maximum width and height",
        "Nathan A. Good",
        "Nathan A. Good",
        "2010",
        "<Image>/Image/Resize to max...",
        "RGB*, GRAY*",
        [
                (PF_INT, "max_width", "Maximum Width", 500),
                (PF_INT, "max_height", "Maximum Height", 500),
                (PF_BOOL, "copy", "Make a JPEG copy", TRUE),
        ],
        [],
        plugin_main)

main()

您可以使用GIMP的“帮助”>“过程浏览器”从过程数据库(pdb变量)中获取要使用的方法的名称,如图6所示。

图6.在过程浏览器中查找另存为JPEG的方法

屏幕快照在左侧显示了一个过程列表,突出显示了文件jpeg-save,在右侧显示了有关该过程的信息,其中包括带有类型和用途的参数列表

用于参数输入类型的常量来自gimpfu库。您可以通过在GIMP或Eclipse的Python控制台中键入清单7中所示的命令来获取可用常量的列表。

清单7.获得有关gimpfu常量的帮助
import gimpfu
help(gimpfu)

常数以PF_并定义可用于输入表单上的控件的数据类型。

运行更新的插件脚本

在将新代码添加到Python脚本中以将图像另存为JPEG之后,您可以通过在GIMP中打开图像并使用“图像”>“调整最大尺寸”菜单项来执行该插件您将看到更新的参数输入框,如图7所示。

图7.更新后的参数输入

屏幕截图显示了python_fu_resize参数窗口,其中包含Maximum Width和Maximum Height条目以及一个“制作JPEG副本”的新按钮

现在,您已经制作了脚本并在某些图像上进行了尝试,您可以在文件夹中的所有图像上运行插件。

在文件夹上同时运行

GIMP具有非交互式批处理模式,该模式允许您从命令行调用GIMP命令。您可以使用命令行功能使用标准通配符对文件夹中的所有图像进行操作。

例如,可以使用清单8中的命令将图像保存为JPEG的方法直接传递到GIMP的批处理模式。

清单8.使用GIMP的非交互式批处理模式保存图像
gimp -i -b '(file-jpeg-save "Menu_006.png" 200 200 TRUE)' -b '(gimp-quit 0)'

但是,在考虑大小约束所需的计算时,这变得有些困难。因此,此插件极大地简化了这两种操作,因此您可以从单个GIMP命令调用它们。

现在您的插件可以使用了,并且已在GIMP中注册,该插件在GIMP的过程数据库中具有其自己的命令。通过转到过程浏览器(GIMP中的“帮助”>“过程浏览器”)并键入您为插件指定的名称,可以看到用于插件的命令例如,如果您python_fu_resize如清单6所示在register方法中对其进行了命名,那么您将在GIMP过程浏览器中将其命名python-fu-resize您可以使用gimp命令和-i -b标志从命令行在GIMP Procedure Browser中显示该命令,如清单9所示。

清单9.从GIMP非交互式批处理模式调用您的插件
gimp -i -b '(python-fu-resize "myimage.png" 200 200 TRUE)' -b '(gimp-quit 0)'

GIMP打开您指定的图像,使用您提供的参数执行命令,然后退出而不保存对原始图像所做的任何修改。通过在非交互式批处理模式下使用GIMP命令,您可以对对包含图像的整个文件夹进行大规模修改的脚本。

清单10中显示的命令在文件夹中的所有可移植网络图形(PNG)图像上操作新插件的命令。

清单10.从GIMP调用文件夹中所有图像上的插件
gimp -i -b '(python-fu-resize "*.png" 200 200 TRUE)' -b '(gimp-quit 0)'

概括

Python是一种面向对象的脚本语言,可让您编写可在许多不同平台(例如Linux,Mac和Windows)上执行的脚本。对Python脚本语言的工具支持非常丰富-从文本编辑器中的简单语法突出显示到Eclipse插件。

GIMP是可在许多不同平台上对图形文件进行复杂编辑的应用程序。GIMP支持插件的概念,该插件提供了扩展点,您可以使用这些扩展点通过脚本来自动执行甚至是非常复杂的任务。因为GIMP在插件中支持Python脚本,所以您可以使用Python扩展GIMP。使用非交互式批处理模式,可以使用适合脚本编写的方法从命令行调用插件。

飞码网-免费源码博客分享网站 爱上飞码网—https://www.codefrees.com— 飞码网-matlab-python-C++ 爱上飞码网—https://www.codefrees.com— 飞码网-免费源码博客分享网站
赞 ()
内容页底部广告位3
留言与评论(共有 0 条评论)
   
验证码: