设为首页 - 加入收藏 ASP站长网(Aspzz.Cn)- 科技、建站、经验、云计算、5G、大数据,站长网!
热搜: 创业者 手机 数据
当前位置: 首页 > 服务器 > 系统 > 正文

如何使用windows命令行中的gimpfu运行python脚本?

发布时间:2021-01-06 11:46 所属栏目:52 来源:网络整理
导读:我正在尝试使用gimp 2.8.22的函数将pdf转换为jpeg,我想使用我的 windows cmd中的gimpfu库(我安装了 python 3.6.1)使用python脚本. 现在,我不想尝试使用示例脚本: #!/usr/bin/env python# Hello World in GIMP Pythonfrom gimpfu import *def hello_world(in

我正在尝试使用gimp 2.8.22的函数将pdf转换为jpeg,我想使用我的 windows cmd中的gimpfu库(我安装了 python 3.6.1)使用python脚本.

现在,我不想尝试使用示例脚本:

#!/usr/bin/env python

# Hello World in GIMP Python

from gimpfu import *

def hello_world(initstr,font,size,color) :
    # First do a quick sanity check on the font
    if font == 'Comic Sans MS' :
        initstr = "Comic Sans? Are you sure?"

    # Make a new image. Size 10x10 for now -- we'll resize later.
    img = gimp.Image(1,1,RGB)

    # Save the current foreground color:
    pdb.gimp_context_push()

    # Set the text color
    gimp.set_foreground(color)

    # Create a new text layer (-1 for the layer means create a new layer)
    layer = pdb.gimp_text_fontname(img,None,initstr,10,True,PIXELS,font)

    # Resize the image to the size of the layer
    img.resize(layer.width,layer.height,0)

    # Background layer.
    # Can't add this first because we don't know the size of the text layer.
    background = gimp.Layer(img,"Background",layer.width,RGB_IMAGE,100,NORMAL_MODE)
    background.fill(BACKGROUND_FILL)
    img.add_layer(background,1)

    # Create a new image window
    gimp.Display(img)
    # Show the new image window
    gimp.displays_flush()

    # Restore the old foreground color:
    pdb.gimp_context_pop()

register(
    "python_fu_hello_world","Hello world image","Create a new image with your text string","Akkana Peck","2010","Hello world (Py)...","",# Create a new image,don't work on an existing one
    [
        (PF_STRING,"string","Text string",'Hello,world!'),(PF_FONT,"font","Font face","Sans"),(PF_SPINNER,"size","Font size",50,(1,3000,1)),(PF_COLOR,"color","Text color",(1.0,0.0,0.0))
    ],[],hello_world,menu="<Image>/File/Create")

main()

我尝试从我的cmd运行脚本,如下所示:

gimp-2.8 --no-interface --batch '(python_fu_hello_world RUN-NONINTERACTIVE "Hello" Arial 50 red)' -b '(gimp-quit 1)'

但是,无论我做什么,我总是会出现同样的错误信息:

(gimp-2.8:1020): LibGimpBase-WARNING **: gimp-2.8: gimp_wire_read():
error

编辑:好的,谢谢.我省略了接口语句,我也尝试了最简单的例子来弄清楚什么是错误的:

#!/usr/bin/env python

# Hello World in GIMP Python

from gimpfu import *

def hello_world():
 gimp.message("Hello,GIMP world!\n")

register(
 "hello_world",'A simple Python-Fu "Hello,World" plug-in','When run this plug-in prints "Hello,GIMP world!" in a dialog box.',"Tony Podlaski","Tony Podlaski 2017. MIT License","2017","Hello World",menu="<Image>/Filters/HelloWorld",)

main()

当我从Gimp本身运行它时,该脚本实际上有效,但是当我尝试从我的cmd运行它时,Gimp打开另一个cmd说:错误:(:1)eval:未绑定变量:hello_world

有人知道我在这里缺少什么吗?

解决方法

要运行python脚本,您不需要将其注册为插件.恕我直言,你甚至应该避免这种情况,这会不必要地污染Gimp的菜单和程序名称空间.这是一个例子:

批处理脚本(保存为batch.py??):

#!/usr/bin/python
# -*- coding: iso-8859-15 -*-

import os,glob,sys,time
from gimpfu import *


def process(infile):
        print "Processing file %s " % infile
        image = pdb.file_jpeg_load(infile,infile)
        drawable = pdb.gimp_image_get_active_layer(image)

        print "File %s loaded OK" % infile
        pdb.plug_in_photocopy(image,drawable,8.,0.8,0.2,0.2)
        pdb.plug_in_cartoon(image,7.,0.2)
        outfile=os.path.join('processed',os.path.basename(infile))
        outfile=os.path.join(os.path.dirname(infile),outfile)
        print "Saving to %s" % outfile
        pdb.file_jpeg_save(image,outfile,"0.5",0)
        print "Saved to %s" % outfile
        pdb.gimp_image_delete(image)


def run(directory):
        start=time.time()
        print "Running on directory \"%s\"" % directory
#   os.mkdir(os.path.join(directory,'processed'))
        for infile in glob.glob(os.path.join(directory,'*.jpg')):
                process(infile)
        end=time.time()
        print "Finished,total processing time: %.2f seconds" % (end-start)


if __name__ == "__main__":
        print "Running as __main__ with args: %s" % sys.argv

打电话给它:

gimp -idf --batch-interpreter python-fu-eval -b "import sys;sys.path=['.']+sys.path;import batch;batch.run('./images')" -b "pdb.gimp_quit(1)"

慢动作中的参数:

> -idf:没有用户界面工作,既不加载数据也不加载字体(你可能需要保留字体来加载pdfs)
> –batch-interpreter python-fu-eval:无论后面是什么-b是Python,而不是script-fu
>“import sys; sys.path = [‘.’] sys.path; import batch; batch.run(‘./ images’)”:我们要求Gimp执行的代码,即:

> import sys; sys.path = [‘.’] sys.path;:扩展导入路径以包含当前目录
> import batch;:使用我们的脚本导入文件,该脚本现在位于路径的一部分目录中.
> batch.run(‘./ images’):调用我们导入的批处理模块的run()函数,为其提供包含要处理的图像的目录的名称.

> -b“pdb.gimp_quit(1)”:另一段python:完成后退出.

注意命令行如何巧妙地使用双引号和单引号将所有参数传递给Gimp,然后传递给Python(*).是的,您可以在Windows中使用正斜杠作为文件分隔符.

要进行调试,Windows中的问题有点复杂,因为并不总是有stdout流.可以帮助的事情:

(编辑:ASP站长网)

网友评论
推荐文章
    热点阅读