Command-Line
從 PSD 中提取文本層(ImageMagick 或 GiMP)
我想從圖層中提取文本資訊(如字型、字型樣式、字型大小和內容)以及圖層的名稱和編號。
標準 repo 上的所有可用命令行都是一個選項。
我知道它可以從 Photoshop 腳本中完成,但為了科學起見,我想從 Unix 伺服器上完成,以後可能會從 zip 中的多個文件中提取所有資訊並使用多種工具處理它們。
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
這很麻煩,因為我們從 STDIN 執行批處理模式並重定向腳本。我們還得到了提示輸出,這很醜陋,但應該適用於大多數 GIMP 版本。
這是如何運作的:
- 由於我們只載入了一張圖片,我們知道它被命名為
1
.- 我們得到層
(gimp-image-get-layers 1)
vector-ref
這些層是一個固定的向量,所以我們使用(inside awhile
)遍歷它們(gimp-item-is-text-layer layer)
為我們提供是否可以在圖層上執行文本特定操作的資訊。gimp-text-layer-get-*
給我們關於文本層的資訊。- 對於非文本層,我們列印較少的資訊。
如何獲取 script-fu 的函式參考?
在 GIMP 中轉到
Filters -> Script Fu -> Console
. 在那裡,在您可以插入方案命令的文本欄位旁邊,您會看到一個按鈕Browse
,用於獲取您的 GIMP 版本的參考。免責聲明:這個測試很差,我只有一個簡單的兩層(沒有任何文字)PSD來測試它。