Dawid Cichoń
Dawid Cichoń

Reputation: 75

Can't fit text to image with ImageMagick

I need to fit my text to image. My image have different sizes so i can't set constant pointsize.

My command looks something like this

convert 
    -fill white
    -font Winter Calligraphy
    -size `${options.width}x${options.height}`
    label: KJHGFD
    test.gif

on output you can see cropped part on top of picture.

Output: output image

Upvotes: 2

Views: 1828

Answers (2)

Mark Setchell
Mark Setchell

Reputation: 207345

Here is a slightly kludgy way of getting the result you want. Here are the steps:

  • First, use caption: to get ImageMagick to tell you the pointsize it would use to fill your text box and extract that info

  • Create a canvas twice as wide and twice as tall as the one you really want and draw your text in the middle of that - it is bound to fit!

  • Now trim away the extraneous background around the text so you have the absolute minimum bounding box to contain the text

  • Resize the result to your desired size.


#!/bin/bash

# Width, height and text
w=600
h=150
text="KJHGFD"

# Get pointsize ImageMagick thinks is good
pointsize=$(convert -gravity center -background black -fill white -size ${w}x${h} \
    -font "Winter Calligraphy.ttf" caption:"$text" -format "%[caption:pointsize]" info:)

echo ImageMagick likes pointsize: $pointsize

# So draw text in that size on larger canvas, trim to bounds of letters and resize to desired size
wb=$((w*2))
hb=$((h*2))
convert -gravity center -fill white -size ${wb}x${hb} xc:black \
    -font "Winter Calligraphy.ttf" -pointsize $pointsize -annotate 0 "$text" \
    -trim +repage -resize ${w}x${h}\! result.png

enter image description here

Upvotes: 2

fmw42
fmw42

Reputation: 53089

This works for me in ImageMagick 6.9.10.97 Q16 Mac OSX. I have added -background white -fill black -gravity center to your command.

convert -background white -fill black -font "/library/fonts/Winter Calligraphy.ttf" -size 569x196 -gravity center label:KJHGFD test.gif


enter image description here

Upvotes: 2

Related Questions