adiciona nome do arquivo como texto no canto de um arquivo de imagem

5

Eu tenho um monte de imagens jpeg. Diga 001abcd.jpg , %código%, e assim por diante.

Eu quero capturar o nome do arquivo e adicioná-lo como um texto na própria imagem em um canto. Portanto, o resultado seria, por exemplo, que o arquivo 002abcd.jpg terá "003abcd" impresso em um canto da imagem. (A extensão não precisa estar lá.)

Eu quero um comando de terminal que possa processar centenas de imagens em lote e adicionar seus próprios nomes de arquivos em suas respectivas imagens.

Estou usando o Linux Mint 17.

Algo me diz que imagemagick pode ser útil, mas eu não sei scripting.

É fácil colocar um único texto comum em todas as imagens. mas eu não sei como colocar nomes de arquivos únicos como o texto nas respectivas imagens de uma só vez.

    
por Emmanuel Fernando 03.06.2015 / 21:59

2 respostas

6

mogrify faz o processamento em lote para que você possa usar algo assim (altere a fonte, o tamanho, a cor, a posição, etc. de acordo com seu gosto):

mogrify -font Liberation-Sans -fill white -undercolor '#00000080' \
-pointsize 26 -gravity NorthEast -annotate +10+10 %t *.jpg

para adicionar o nome do arquivo sem extensão ( %t ) a todos os jpg s no diretório atual, por exemplo, orca-lm-1.jpg :

Isso substituirá seus arquivos, portanto, certifique-se de ter cópias de backup.
Se você usar um formato diferente (por exemplo, png ) para os arquivos de saída, os arquivos originais permanecerão inalterados:

mogrify -format 'png' -font Liberation-Sans -fill white -undercolor \
'#00000080' -pointsize 26 -gravity NorthEast -annotate +10+10 %t *.jpg
    
por 04.06.2015 / 00:15
1

Na verdade, você pode usar o ImageMagick para escrever texto em uma imagem. Use o utilitário convert para transformar uma imagem em um novo arquivo (ou mogrify para transformar um arquivo em lugar, mas eu não recomendo, porque se você cometer um erro, você perde o original). Você especifica o texto com a opção -annotate , que pode conter as sequências de escape , como %t , para o nome do arquivo sem diretório ou extensão. Existem muitas outras opções que permitem controlar a posição, tamanho, fonte, cor, etc.

Suponha que seus arquivos estejam em um subdiretório chamado original do diretório atual. Crie um diretório labeled :

mkdir labeled

Para converter as imagens, chame convert da seguinte forma:

convert original/001abcd.jpg -fill green -pointsize 20 -annotate +0+0 %t -gravity north-east labeled/001abcd.jpg

O primeiro parâmetro após -annotate é a geometria, que indica a localização do texto. +0+0 é o canto; o -gravity north-east diz que esse é o canto superior direito. O segundo parâmetro é o texto, que aqui é apenas a seqüência de escape que diz "use o nome do arquivo".

Para converter todos os arquivos .jpg no diretório, escreva um loop. O padrão curinga *.jpg representa a lista de .jpg arquivos, para esse loop atua em todos os arquivos .jpg no diretório original . No corpo do loop, "$x" refere-se ao nome do arquivo com a parte do diretório; "${x##*/}" refere-se ao nome do arquivo sem a parte do diretório.

for x in original/*.jpg; do
  convert "$x" original/001abcd.jpg -fill green -pointsize 20 -annotate +0+0 %t -gravity north-east "labeled/${x##*/}"
done
    
por 04.06.2015 / 00:36