O GIMP tem a extensão do esquema script-fu que pode ser executada a partir da linha de comando. Isso será incompleto porque eu não escrevi nenhum esquema em uns 3-4 anos, mas aqui não vai nada:
Assumindo o seguinte script em um arquivo chamado 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)
Nós podemos fazer:
$ 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
Isso é bastante hacky, já que estamos executando o modo em lote do STDIN e redirecionando o script. Também obtemos a saída do prompt, que é bem feia, mas deve funcionar com a maioria das versões do GIMP.
Como isso funciona:
- Como temos apenas uma imagem carregada, sabemos que ela é denominada
1
. - Recebemos as camadas com
(gimp-image-get-layers 1)
- As camadas são um vetor fixo, por isso passamos por elas usando
vector-ref
(dentro de umwhile
) -
(gimp-item-is-text-layer layer)
nos fornece informações se podemos executar operações específicas de texto na camada. -
gimp-text-layer-get-*
nos fornece informações sobre a camada de texto. - Para camadas sem texto, imprimimos menos informações.
Como obter uma referência de função para o script-fu?
No GIMP, vá para Filters -> Script Fu -> Console
. E lá, ao lado do campo de texto onde você pode inserir comandos de esquema, você obtém um botão Browse
que obtém a referência para sua versão do GIMP.
Aviso: isso é mal testado, eu só tenho um simples PSD de duas camadas (sem texto) para testá-lo.