We can use this command to label each image by its name:

montage -label '%t' -size 512x512 "./img/*.*[120x90]" -geometry +5+5 photo.png

I want to label images by a list of strings, which is written in a text file. Docs say:

If the first character of string is @, the image label is read from a file titled by the remaining characters in the string. Labels in a file are literal, no embedded formatting characters are recognized.

But I could not use a file to provide label. I use a command like this:

montage -label @un.txt -size 512x512 "./img/*.*[120x90]" -geometry +5+5 photo.png 

Above, un.txt is the name of text file in ./img/ path. This is a sample result:

4x4 group of images with filename @un.txt under each one

In the result, all images are labeled with the string @un.txt instead of content of un.txt. Also I get this error in terminal:

montage.im6: improper image header `./img/un.txt' @

If I copy un.txt to the current (.) directory and run above command again, I will get this image (there is no label) and below error:

4x4 group of images as before, no text

montage.im6: improper image header `./img/un.txt' @

montage.im6: not authorized `@un.txt' @

With attention to this answer, I found it is probably related to the vulnerability discovered in ImageMagick (here), so I updated my site policy file by removing <policy domain="path" rights="none" pattern="@*" /> line from /etc/ImageMagick/policy.xml. Now montage reads from file.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.