Bash 脚本可以用来自动执行打开的程序中的多个文件的处理吗?例如 GIMP?

Bash 脚本可以用来自动执行打开的程序中的多个文件的处理吗?例如 GIMP?

所以我知道要打开一个程序,我只需要输入该程序的名称。

例子:

#! /bin/bash
gimp

现在我想知道我是否可以使用此脚本向 gimp 发送类似命令。例如打开 Gimp,然后在 Gimp 中转到命令打开 >,然后读取其中包含图像的给定文件夹。

例如我想要的是:

打开 gimp > 读取给定文件夹 > 逐个打开其中的所有图像 > 并对其进行一些过滤 > 然后保存

有办法做到这一点吗? 有办法用 Python 做到这一点吗?

谢谢您的回答。

答案1

在命令行上输入gimp --helpman gimp并查看选项列表(在线版本:https://www.gimp.org/man/gimp.html

gimp 网站还专门有一个页面批处理模式

通常批处理模式是对一个或多个文件执行操作。

所以这:

打开 gimp > 读取给定文件夹 > 逐个打开其中的所有图像 > 并对其进行一些过滤 > 然后保存

变成:

  • 使用gimp -b并在其后面添加过滤器的文件和操作。

无需打开 gimp,也不需要告诉它文件夹名称(您可以cd在命令之前输入它)并且它会自动保存。

这个会很有趣,但是它是用它的母语写的,所以不是 python:

处理多个文件

您可能希望将效果应用于多个文件,通常是同一目录中的一组文件。GIMP 2.2 为此添加了一个非常有用的功能,即 file-glob 插件。这使 GIMP 变成了一个多功能的批处理器。为了使用它,我们需要对脚本进行一些修改:

 (define (batch-unsharp-mask pattern
                              radius
                              amount
                              threshold)
  (let* ((filelist (cadr (file-glob pattern 1))))
    (while (not (null? filelist))
           (let* ((filename (car filelist))
                  (image (car (gimp-file-load RUN-NONINTERACTIVE
                                              filename filename)))
                  (drawable (car (gimp-image-get-active-layer image))))
             (plug-in-unsharp-mask RUN-NONINTERACTIVE
                                   image drawable radius amount threshold)
             (gimp-file-save RUN-NONINTERACTIVE
                             image drawable filename filename)
             (gimp-image-delete image))
           (set! filelist (cdr filelist)))))

此版本的脚本采用 glob 模式而不是文件名,并将“锐化蒙版”滤镜应用于与此模式匹配的所有文件。为了锐化当前目录中的所有 PNG 图像,您需要运行以下命令:

gimp -i -b '(batch-unsharp-mask "*.png" 5.0 0.5 0)' -b '(gimp-quit 0)'

如果您想要 python,请使用模块。使用“gimp-text-layer-new”的随机示例

import gi
from gi.repository import Gimp
result = Gimp.get_pdb().run_procedure(
  'gimp-text-layer-new',
  [image, text, font_name, font_size, 3]
)
layer = result.index(1)

相关内容