Recipe 15.20 Adding Text to an Image

15.20.1 Problem

You want to write text onto an existing image. For example, you want to add a small copyright message to all photos on your web site.

15.20.2 Solution

Use the GD module from CPAN:

use GD;
$image = GD::Image->new($FILENAME);
$blue = $image->colorAllocate(0,0,255);
$image->string(gdTinyFont, 10, 10, "Copyright Me, 2037", $blue);
# write $image->png( ) to file

15.20.3 Discussion

The GD module can load only certain file formats; precisely which depends on the C libraries available when the underlying C library of GD was built. At the time of this writing, GD could read and write PNG, JPEG, XBM, XPM, and WBMP (Windows Bitmap), as well as its own GD2 and GD formats.

The arguments to the string method are: the font to use, the x and y coordinates to draw at, the string to draw, and the color to draw the text in.

GD comes with five fonts: gdTinyFont, gdSmallFont, gdMediumBoldFont, gdLargeFont, and gdGiantFont. If your GD was compiled to handle TrueType fonts, you can write with a TrueType font using:

$image->stringFT($color, $font, $point_size, $angle, $x, $y, $string);

Here, $font is the absolute pathname of the .ttf file containing the TrueType font. The $point_size and $angle parameters indicate the size (in points; fractions are acceptable) and rotation from horizontal (in radians). For example:

$image->stringFT($blue, '/Users/gnat/fonts/arial.ttf', 8, 0,
                 10, 20, 'Copyright Me Me Me');

15.20.4 See Also

The documentation for the GD module; Perl Graphics Programming