我想从图层中提取文本信息(如字体、字体样式、字体大小和内容)以及图层的名称和数量。
标准存储库上所有可用的命令行都是一个选项。
我知道这可以通过 Photoshop 脚本来完成,但为了科学起见,我想从 Unix 服务器上完成它,也许稍后从 zip 中的多个文件中提取所有信息并使用多个工具处理它们。
答案1
GIMP 具有可以从命令行运行的 script-fu 方案扩展。这将是粗略的,因为我已经有 3-4 年没有写过任何计划了,但这里什么也没有:
假设以下脚本位于名为 的文件中sc.sch
:
(define (go-by-layers no layers)
(while (< 0 no)
(let* ((layer (vector-ref layers (- no 1))))
(display "Layer name: ")
(display (car (gimp-item-get-name layer))) (newline)
(if (< 0 (car (gimp-item-is-text-layer layer)))
(begin
(display "This is a text layer") (newline)
(display "Font: ")
(display (car (gimp-text-layer-get-font layer))) (newline)
(display "Text: ")
(display (car (gimp-text-layer-get-text layer))) (newline)
) )
(if (>= 0 (car (gimp-item-is-text-layer layer)))
(begin
(display "Not a text layer")
(newline)
) )
(set! no (- no 1))
)
)
)
(let* ((layers (gimp-image-get-layers 1)))
(display "Number of Layers: ") (display (car layers)) (newline)
(go-by-layers (car layers) (cadr layers))
(display "end") (newline)
)
(gimp-quit 0)
我们可以做的:
$ gimp zz.psd -b - < sc.sch 2>/dev/null
Welcome to TinyScheme, Version 1.40
Copyright (c) Dimitrios Souflis
ts> go-by-layers
ts> Number of Layers: 2
Layer name: Background
Not a text layer
Layer name: Layer 1
Not a text layer
end
#t
这是相当 hacky 的,因为我们从 STDIN 运行批处理模式并重定向脚本。我们还得到提示输出,这非常难看,但应该适用于大多数 GIMP 版本。
这是如何运作的:
- 由于我们只加载了一张图像,因此我们知道它的名称为
1
. - 我们得到的层
(gimp-image-get-layers 1)
vector-ref
这些层是一个固定向量,因此我们使用(在 内while
)遍历它们(gimp-item-is-text-layer layer)
为我们提供是否可以在图层上执行文本特定操作的信息。gimp-text-layer-get-*
给我们有关文本层的信息。- 对于非文本层,我们打印较少的信息。
如何获取 script-fu 的函数引用?
在 GIMP 中转到Filters -> Script Fu -> Console
.在那里,在您可以插入方案命令的文本字段旁边,您会看到一个按钮Browse
,用于获取您的 GIMP 版本的参考。
免责声明:这个测试很差,我只有一个简单的两层(没有任何文本)PSD来测试它。