Extrai a camada de texto do PSD (ImageMagick ou GiMP)

1

Eu quero extrair informações de texto da camada (como fonte, estilo de fonte, tamanho da fonte e conteúdo) com o nome e o número da camada.

Toda a linha de comando disponível no repositório padrão é uma opção.

Eu sei que isso pode ser feito a partir do Photoshop, mas por uma questão de ciência eu gostaria de fazê-lo em um servidor Unix, e talvez depois extrair todas as infos de vários arquivos em um zip e processá-los com várias ferramentas.

    
por Larandar 22.08.2016 / 19:14

1 resposta

0

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 um while )
  • (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.

    
por 23.08.2016 / 02:50