我对 GIMP 脚本中的字符串到数字和数字到字符串的转换感到沮丧。我在 Windows Vista 中运行 GIMP 2.6.8。
我知道 GIMP 的内部 Scheme 实现会随着版本而变化,我似乎无法确定文档。据我所知,GIMP 的 Scheme 是 TinyScheme 的一个子集和/或支持 R5RS 标准程序。无论如何,当我想尝试新的东西时,我通常只是在打包的脚本目录中查看示例,因为这肯定会起作用,对吧?
例如,grid-system.scm 带有最新的 GIMP 版本并具有表达式,
(string-append (number->string obj) " ")
Run Code Online (Sandbox Code Playgroud)
这正是我想要的。但是,如果我在自己的脚本中使用 number->string,或者甚至在 GIMP 的脚本控制台中输入它(这是我通常测试我想做的新东西的方式),它会告诉我 number->string 是一个未绑定的变量:
> (number->string 3)
Run Code Online (Sandbox Code Playgroud)
Error: eval: unbound variable: number->string
来自 R5RS 的其他标准程序可以正常工作:
> (string-append "frust" "rated")
"frustrated"
所以,
1) 除了像搜索 GIMP 的源代码这样激烈的东西之外,是否还有一些当前 GIMP Scheme 脚本的潜在文档?
2) 我可以使用 GIMP 控制台来列出所有已定义的过程以找到我需要的东西吗?
3) 有没有其他人确认 number->string 没有为当前的 Windows 版本定义,即使它出现在打包的脚本中?我的网络搜索没有发现任何相关问题,并且完全卸载所有 GIMP 版本,回到最新版本让我陷入同样的困境。
我有一系列.xcf图像,我想另存为.png。我可以打开每个文件并将其另存为.png,但由于有很多图像,因此需要花费大量时间。
有没有一种方法可以一次转换所有图像,或者有另一种方法我可以花更少的时间完成这项工作?
先感谢您。
如果我打开一个新的Inkscape文档并输入
TEST
Run Code Online (Sandbox Code Playgroud)
然后尝试保存它(如.svg)
整个页面都保存了.
我想要的是一个小小的图标,上面写着' TEST'.
周围没有空的地方.
有点像"裁剪"版.
我是 python-fu 的新手(第二天),所以我的问题可能看起来很天真:我想从“r400r.png”中选择一个矩形部分,将其旋转 90 度,然后将我的选择保存在“ r400ra.png”。
到目前为止,我尝试了以下几行:
for fv in range(400,401):
fn='r%sr.png' % fv
img=pdb.gimp_file_load('/path/'+fn,fn)
drw=pdb.gimp_image_get_active_layer(img)
img1=pdb.gimp_image_new(1024,1568,0)
lyr=pdb.gimp_layer_new(img1,1024,1568,0,'ly1',0,0)
pdb.gimp_rect_select(img,10,200,1422,1024,2,0,0)
drw=pdb.gimp_rotate(drw,0,1.570796327)
pdb.script_fu_selection_to_image(img1,drw)
f0=fn[:5]+'a'+fn[5:]
pdb.gimp_file_save(drw,'/path/'+f0,f0)
Run Code Online (Sandbox Code Playgroud)
“lyr”层之所以存在,是因为我的理解是它是必须的,尽管我不清楚为什么。“for”循环最终应该批量处理一堆文件;为了测试,它仅限于一个文件。我在尝试执行“script_fu_selection_to_image”时收到错误。
您能给我指出正确的方向吗?
谢谢,SxN
问题
举个例子,有没有一种简单的方法可以裁剪掉 Google 徽标中的 o(提前知道它们的坐标)?
结果应该是“Ggle”,其图像宽度比原始图像更小,因为缺少 o。
不必使用 ImageMagick 来完成。它还可以是 Gimp、Inkscape 或任何其他可以从命令行编写脚本的 Linux 程序。

我试图找出一种简单的方法来执行我编写的 Python-Fu 脚本,该脚本在 Gimp 的 Python-Fu 解释器插件的单线程模式下工作,但由于Windows 非 POSIX/OS.Fork 限制在Pool.map_async(). 作为一种解决方法,我试图直接从 cmd shell 调用脚本,但无法找出正确的命令来完成它。我的 PATH 变量中有 gimp bin 目录,我正在尝试实现如下所示的内容...
c:\>gimp-console-2.8 --no-interface --batch "(python-fu execfile('myPyFuScript.py'))"
c:\>gimp-console-2.8 --no-interface --batch "myPyFuScript.py"
Run Code Online (Sandbox Code Playgroud)
有没有办法让 Gimp 使用它的 Python-Fu 模块从 Windows cmd shell 发出的命令中执行 python 脚本?
只是为了增加背景,我从以下文档中汲取灵感......
来自 Shell 的 GIMP Python 调用
所有这一切意味着您可以使用 (plug-in-script-fu-eval ...) 评估器直接从您的 shell 轻松调用 GIMP Python 插件,例如上面的插件:
gimp --no-interface --batch '(python-fu-console-echo RUN-NONINTERACTIVE "another string" 777 3.1416 (list 1 0 0))' '(gimp-quit 1)'
Run Code Online (Sandbox Code Playgroud) 我在使用 gimp 批处理模式时遇到了问题。我想要做的就是打开 2 个 png 文件作为一个图像的图层并将它们一起保存为图标 (.ico)。
问题:Gimp 只是将两个图像作为单独的窗口打开,而不是在一层中打开两个图像。
我的代码如下所示:
(define (merge-to-icon filename layername endname)
(
let*
(
(image (car (gimp-file-load RUN-NONINTERACTIVE filename filename)))
(drawable (car (gimp-image-get-active-layer image)))
(adlayer (car (gimp-file-load-layer RUN-NONINTERACTIVE image layername)))
)
(gimp-image-insert-layer image adlayer 0 0)
(set! drawable (car (gimp-image-get-active-layer image)))
(gimp-displays-flush)
(gimp-file-save RUN-NONINTERACTIVE image drawable endname endname)
))
Run Code Online (Sandbox Code Playgroud) 我想获得图像的选定区域px坐标.我使用gimp,我可以在python fu控制台上看到它作为实时调试吗?
我打算在图片上自由选择一些区域,我想在控制台上学习它.哪个坐标位于所选区域?
我正在为 GIMP 开发一个 python 插件,我想获取图层的 RGB 矩阵作为 numpy 数组。要访问 python 插件中的层,我使用下一个代码:
def python_function(img, layer):
layer = img.layers[0]
Run Code Online (Sandbox Code Playgroud)
我想创建一个layer变量,而不是一个 gimp.Image 变量,一个包含每个像素的 RGB 值的 numpy 数组。我在其他nonGimp-Python代码用的是这个下一行:frame2 = misc.imread('C:\Users\User\Desktop\image2.png').astype(np.float32)。如果我打印,frame2我会得到一个这样的矩阵,其中包含每个像素的 RGB 值:
[[[ 111. 179. 245.]
[ 111. 179. 245.]
[ 111. 179. 245.]
...,
[ 95. 162. 233.]
[ 95. 162. 233.]
[ 95. 162. 233.]]
[[ 111. 179. 245.]
[ 111. 179. 245.]
[ 111. 179. 245.]
...,
[ 95. 162. 233.]
[ 95. 162. 233.] …Run Code Online (Sandbox Code Playgroud) 我正在尝试编写一个简单的 script-fu 函数。我希望它采用一个filename作为参数并从文件夹(其路径将被硬编码)加载该文件。
基本代码:
(define (myfunction inputfile)
(let * ( (image (cat (file-png-load 1 inputfile inputfile)
^^^^^^^^^
...
Run Code Online (Sandbox Code Playgroud)
这是我想用 ecmascript 语法实现的目标:
"foldername/" + inputfile
Run Code Online (Sandbox Code Playgroud)
我查看了Scheme 文档,但没有看到变量+字符串连接的示例......
https://groups.csail.mit.edu/mac/ftpdir/scheme-7.4/doc-html/scheme_7.html#SEC61
提前致谢,祝您有美好的一天。