ubuntucommand-lineimagemagickubuntu-16.04imagemagick-convert

Use ImageMagick to Generate Image from Text?


I'm trying to use ImageMagick to create thumbnail images that are 3840 x 2160.

I need the image to have a black background and white text. The text should be centered vertically and horizontally.

I want to be able to set a font size, but if the text would extend off the image, automatically decrease the font size so it fits with some amount of padding on the left and right.

I will be doing this in bulk with several hundred thousand images. From what I've been able to find, it looks like you always have to set a font size and there's no way to make it dynamic.

Can anyone confirm if this is possible to do?


Solution

  • You can set a size that specifies how large a space is available for your text and ImageMagick will choose the largest pointsize text that will fit:

    magick -gravity center -background black -fill white -size 400x300 -font /System/Library/Fonts/MarkerFelt.ttc    caption:"Short Text" short.png
    

    enter image description here

    magick -gravity center -background black -fill white -size 400x300 -font /System/Library/Fonts/MarkerFelt.ttc    caption:"Somewhat longer text that will get rendered in a smaller font" long.png
    

    enter image description here


    If you want a margin around the text, you can set a maximum size for the text, then increase the size of the canvas with -extent - I'll do that in red so you can see what the -extent added:

    magick -gravity center -background black -fill white -size 400x300 -font /System/Library/Fonts/MarkerFelt.ttc    caption:"Somewhat longer text" -background red -extent 410x400 long.png
    

    enter image description here


    If you are reading lines from files to generate your hundreds of thousands of images, you can pipe the text in from another command like this:

    echo -n "Text supplied by other command" | magick -gravity center -background black -fill white -size 400x300 -font /System/Library/Fonts/MarkerFelt.ttc caption:@- result.png 
    

    enter image description here


    If you want to know what pointsize ImageMagick chose, you can get it like this:

    magick identify -format "%[caption:pointsize]\n" result.png
    59