Current Location: Home> Latest Articles> Description of incompatibility between imagefontwidth() and custom fonts

Description of incompatibility between imagefontwidth() and custom fonts

M66 2025-05-26

In PHP, the imagefontwidth() function is used to get the character width of the built-in font. The purpose of this function is to be used in conjunction with the built-in fonts (numbers 1 to 5) provided by the GD library to calculate the display width of the string in the image. Although it is simple and easy to use, the imagefontwidth() function does not work when using custom fonts such as TrueType fonts, which often confuses developers.

This article will explain in detail why the imagefontwidth() function is incompatible with custom fonts and the technical reasons behind it, and give a solution to how to correctly obtain custom font widths.


1. Introduction to imagefontwidth() function

The imagefontwidth() function is defined as follows:

 int imagefontwidth ( int $font )
  • The parameter $font is the built-in font number, with values ​​ranging from 1 to 5.

  • The return value is the fixed width (unit: pixels) of a character in the font.

This function can only handle the fonts that come with the GD library, and the fonts are bitmap fonts of fixed width and the character width is the same.


2. Why can't we measure custom font width with imagefontwidth() ?

2.1 The essential difference between built-in fonts and custom fonts

  • The built-in font is a bitmap font predefined by the GD library, with fixed character widths and known.

  • Custom fonts are usually vector fonts (such as TrueType font.ttf), with variable character widths (proportional fonts), and different widths for each character.

The design premise of the imagefontwidth() function is that the font is of a fixed width and is identified by a built-in font number, and there is no function to read the font file.

2.2 imagefontwidth() does not support font files

Custom fonts are drawn by functions imagettftext() or imagettfbbox() , which calculate character width and height by loading font files and using complex font metrics. imagefontwidth() simply cannot recognize and calculate character sizes in font files.


3. How to get the width of a custom font?

For custom fonts, the correct way is to use the imagettfbbox() function:

 array imagettfbbox ( float $size , float $angle , string $fontfile , string $text )
  • $size : Font size

  • $angle : rotation angle (usually 0)

  • $fontfile : Font file path

  • $text : string to measure

Returns an array of 8 elements representing the coordinates of the four corners of the string. By calculating these coordinates, you can obtain the string width and height.


4. Detailed example: Use imagettfbbox() to get the string width

 <?php
// Font size
$size = 16;
// Rotation angle
$angle = 0;
// Custom font path
$fontfile = 'm66.net/fonts/arial.ttf';
// The string to measure
$text = "Hello World";

// Get text bounding box
$bbox = imagettfbbox($size, $angle, $fontfile, $text);

// Calculate width
$width = abs($bbox[2] - $bbox[0]);

echo "The string width is: " . $width . " Pixels";
?>

In this example, $bbox[0] and $bbox[2] represent the X coordinates in the lower left and lower right corners of the string, respectively. The width of the string can be obtained by subtracting the two and taking the absolute value.


5. Solution summary

question Solution
imagefontwidth() cannot measure custom font width Calculate string width using imagettfbbox() combined with font files
Need to draw custom font text Use imagettftext() instead of imagestring() or imagestringup()

6. Additional tips

  • Ensure that the font file path is correct and accessible, and avoid function errors.

  • imagettfbbox() returns the coordinates that may contain negative values, and abs() is required to calculate the width.

  • The font size and angle have an impact on the width, and the parameter settings need to be adjusted according to the needs.


Through the introduction of this article, you should understand the reason why the imagefontwidth() function is only suitable for built-in fonts, and master the correct way to use imagettfbbox() to measure the width of custom font strings, so as to avoid layout and display problems caused by wrong function selection.