1#!/usr/bin/perl 2# 3# annotate_words.pl 4# 5# Take the internal string, split it into words and try to annotate each 6# individual word correctly, so as to control spacing between the words 7# under program control. 8# 9# A demonstration of using QueryFontMetrics(), by passing it exactly the same 10# arguments as you would for Annotate(), to determine the location of the 11# text that is/was drawn. 12# 13# Example script from Zentara 14# http://zentara.net/Remember_How_Lucky_You_Are.html 15# 16use warnings; 17use strict; 18use Image::Magick; 19 20my $image = Image::Magick->new; 21$image->Set(size=>'500x200'); 22my $rc = $image->Read("xc:white"); 23 24my $str = 'Just Another Perl Hacker'; 25my (@words) = split ' ',$str; 26#print join "\n",@words,"\n"; 27 28my ($x,$y) = (50,50); 29 30foreach my $word (@words){ 31 32 $image->Annotate( 33 pointsize => 24, 34 fill => '#000000ff', #last 2 digits transparency in hex ff=max 35 text => $word, 36 gravity => 'NorthWest', 37 align => 'left', 38 x => $x, 39 y => $y, 40 ); 41 42 my ( $character_width,$character_height,$ascender,$descender,$text_width, 43 $text_height,$maximum_horizontal_advance, $boundsx1, $boundsy1, 44 $boundsx2, $boundsy2,$originx,$originy) = 45 $image->QueryFontMetrics( 46 pointsize => 24, 47 text => $word, 48 gravity => 'NorthWest', 49 align => 'left', 50 x => $x, 51 y => $y, 52 ); 53 54 print "$word ( $character_width, $character_height, 55 $ascender,$descender, 56 $text_width, $text_height, 57 $maximum_horizontal_advance, 58 $boundsx1, $boundsy1, 59 $boundsx2, $boundsy2, 60 $originx,$originy)\n"; 61 62 my $n = $x + $originx + $character_width/3; # add a space 63 print "Next word at: $x + $originx + $character_width/3 => $n\n"; 64 $x = $n; 65 66} 67 68$image->Write("show:"); 69 70exit; 71 72