Podemos usar este comando para rotular cada imagem pelo seu nome:
montage -label '%t' -size 512x512 "./img/*.*[120x90]" -geometry +5+5 photo.png
Quero rotular imagens por uma lista de strings, que está escrita em um arquivo de texto.Os documentos dizem:
Se o primeiro caractere da string for @, o rótulo da imagem será lido de um arquivo intitulado pelos caracteres restantes da string. Os rótulos em um arquivo são literais e nenhum caractere de formatação incorporado é reconhecido.
Mas não pude usar um arquivo para fornecer rótulo. Eu uso um comando como este:
montage -label @un.txt -size 512x512 "./img/*.*[120x90]" -geometry +5+5 photo.png
Acima un.txt
está o nome do arquivo de texto no ./img/
caminho. Este é um exemplo de resultado:
No resultado, todas as imagens são rotuladas com a string @un.txt
em vez do conteúdo de un.txt
. Também recebo este erro em terminal
:
montage.im6: improper image header `./img/un.txt' @
error/txt.c/ReadTXTImage/429
Se eucópia de un.txt
para o diretório atual ( .
) e executar o comando acima novamente, obterei esta imagem (não há rótulo) e o erro abaixo:
montage.im6: improper image header `./img/un.txt' @
error/txt.c/ReadTXTImage/429.
montage.im6: not authorized `@un.txt' @
error/property.c/InterpretImageProperties/2959.
Responder1
Com atenção paraesta resposta, descobri que provavelmente está relacionado à vulnerabilidade descoberta no ImageMagick (aqui), então atualizei meu arquivo de políticas do site removendo <policy domain="path" rights="none" pattern="@*" />
a linha do /etc/ImageMagick/policy.xml
. Agora montage
lê do arquivo.