imagettftext(): calculate font size to ensure text fits image width

dynamic-content, dynamic-image-generation, imagettftext, php

Solution

You can calculate the bounding box of TTF text before outputting it with the `imagettfbbox` function. Unfortunately there is no direct way of scaling to fit a width, so you'll have to do it yourself.

One way of doing it is to pass the text with a default font size of, say 20, to `imagettfbbox` and retrieve the width from it. You can then calculate how much smaller or bigger the text should be to fit the size you want by calculating a scale factor:

scale = targetWidth / bboxWidth;

Then draw the text with the proper size:

fontSize = 20 * scale;

using the `imagettftext` function. Fonts don't scale 100% perfectly this way, but you'll get a very good approximation.

See the documentation of `imagettfbox` here.

Problem

I'm using `imagettftext()` to write dynamic text on an image and I want it to fit my image width. How can I calculate the font size by the text lenght?

Original source