- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试使用 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, 0, 0, initstr, 10,
True, size, PIXELS, font)
# Resize the image to the size of the layer
img.resize(layer.width, layer.height, 0, 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, layer.height,
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",
"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
编辑:好的,谢谢。我省略了接口(interface)语句,还尝试了最简单的示例来找出问题所在:
#!/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",
"",
[],
[],
hello_world,
menu="<Image>/Filters/HelloWorld",
)
main()
当我从 Gimp 本身运行脚本时,该脚本实际上有效,但是当我尝试从我的 cmd 运行它时,Gimp 打开另一个 cmd 说:Error: ( : 1) eval: unbound variable: hello_world
有人知道我在这里缺少什么吗?
最佳答案
要运行 python 脚本,您不需要将其注册为插件。恕我直言,您甚至应该避免这种情况,这会不必要地污染 Gimp 的菜单和过程 namespace 。这是一个例子:
批处理脚本(另存为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.gimp_file_load(infile, infile, run_mode=RUN_NONINTERACTIVE)
drawable = image.active_layer
print "File %s loaded OK" % infile
pdb.plug_in_photocopy(image, drawable,8.,0.8,0.2,0.2)
pdb.plug_in_cartoon(image, drawable, 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, drawable, outfile, outfile, "0.5",0,1,0,"",0,1,0,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
:在没有用户界面的情况下工作,既不加载数据也不加载字体(您可能需要保留字体以加载 pdf)--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')
:调用我们导入的batch
模块的run()
函数,给它包含要处理的图像的目录的名称。-b "pdb.gimp_quit(1)"
:另一段 python:完成后退出。请注意命令行如何巧妙地使用双引号和单引号将所有参数传递给 Gimp,然后再传递给 Python(*)。是的,您可以在 Windows 中使用正斜杠作为文件分隔符。
要调试,Windows 中的事情有点复杂,因为并不总是有标准输出流。可以提供帮助的事情:
-i
参数,以便您获得 UI,或许还有机会看到消息。--verbose
使 Gimp 启动辅助控制台窗口。(*) 在 Linux/OSX shell 中会做相反的事情:单引号用于 shell,双引号用于 Python。
关于python - 如何从命令行使用 gimpfu 运行 python 脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44430081/
我在网上搜索但没有找到任何合适的文章解释如何使用 javascript 使用 WCF 服务,尤其是 WebScriptEndpoint。 任何人都可以对此给出任何指导吗? 谢谢 最佳答案 这是一篇关于
我正在编写一个将运行 Linux 命令的 C 程序,例如: cat/etc/passwd | grep 列表 |剪切-c 1-5 我没有任何结果 *这里 parent 等待第一个 child (chi
所以我正在尝试处理文件上传,然后将该文件作为二进制文件存储到数据库中。在我存储它之后,我尝试在给定的 URL 上提供文件。我似乎找不到适合这里的方法。我需要使用数据库,因为我使用 Google 应用引
我正在尝试制作一个宏,将下面的公式添加到单元格中,然后将其拖到整个列中并在 H 列中复制相同的公式 我想在 F 和 H 列中输入公式的数据 Range("F1").formula = "=IF(ISE
问题类似于this one ,但我想使用 OperatorPrecedenceParser 解析带有函数应用程序的表达式在 FParsec . 这是我的 AST: type Expression =
我想通过使用 sequelize 和 node.js 将这个查询更改为代码取决于在哪里 select COUNT(gender) as genderCount from customers where
我正在使用GNU bash,版本5.0.3(1)-发行版(x86_64-pc-linux-gnu),我想知道为什么简单的赋值语句会出现语法错误: #/bin/bash var1=/tmp
这里,为什么我的代码在 IE 中不起作用。我的代码适用于所有浏览器。没有问题。但是当我在 IE 上运行我的项目时,它发现错误。 而且我的 jquery 类和 insertadjacentHTMl 也不
我正在尝试更改标签的innerHTML。我无权访问该表单,因此无法编辑 HTML。标签具有的唯一标识符是“for”属性。 这是输入和标签的结构:
我有一个页面,我可以在其中返回用户帖子,可以使用一些 jquery 代码对这些帖子进行即时评论,在发布新评论后,我在帖子下插入新评论以及删除 按钮。问题是 Delete 按钮在新插入的元素上不起作用,
我有一个大约有 20 列的“管道分隔”文件。我只想使用 sha1sum 散列第一列,它是一个数字,如帐号,并按原样返回其余列。 使用 awk 或 sed 执行此操作的最佳方法是什么? Accounti
我需要将以下内容插入到我的表中...我的用户表有五列 id、用户名、密码、名称、条目。 (我还没有提交任何东西到条目中,我稍后会使用 php 来做)但由于某种原因我不断收到这个错误:#1054 - U
所以我试图有一个输入字段,我可以在其中输入任何字符,但然后将输入的值小写,删除任何非字母数字字符,留下“。”而不是空格。 例如,如果我输入: 地球的 70% 是水,-!*#$^^ & 30% 土地 输
我正在尝试做一些我认为非常简单的事情,但出于某种原因我没有得到想要的结果?我是 javascript 的新手,但对 java 有经验,所以我相信我没有使用某种正确的规则。 这是一个获取输入值、检查选择
我想使用 angularjs 从 mysql 数据库加载数据。 这就是应用程序的工作原理;用户登录,他们的用户名存储在 cookie 中。该用户名显示在主页上 我想获取这个值并通过 angularjs
我正在使用 autoLayout,我想在 UITableViewCell 上放置一个 UIlabel,它应该始终位于单元格的右侧和右侧的中心。 这就是我想要实现的目标 所以在这里你可以看到我正在谈论的
我需要与 MySql 等效的 elasticsearch 查询。我的 sql 查询: SELECT DISTINCT t.product_id AS id FROM tbl_sup_price t
我正在实现代码以使用 JSON。 func setup() { if let flickrURL = NSURL(string: "https://api.flickr.com/
我尝试使用for循环声明变量,然后测试cols和rols是否相同。如果是,它将运行递归函数。但是,我在 javascript 中执行 do 时遇到问题。有人可以帮忙吗? 现在,在比较 col.1 和
我举了一个我正在处理的问题的简短示例。 HTML代码: 1 2 3 CSS 代码: .BB a:hover{ color: #000; } .BB > li:after {
我是一名优秀的程序员,十分优秀!