imagemagick/PerlMagick/demo/annotate_words.pl

72 lines
1.9 KiB
Perl
Executable File

#!/usr/bin/perl
#
# annotate_words.pl
#
# Take the internal string, split it into words and try to annotate each
# individual word correctly, so as to control spacing between the words
# under program control.
#
# A demonstration of using QueryFontMetrics(), by passing it exactly the same
# arguments as you would for Annotate(), to determine the location of the
# text that is/was drawn.
#
# Example script from Zentara
# http://zentara.net/Remember_How_Lucky_You_Are.html
#
use warnings;
use strict;
use Image::Magick;
my $image = Image::Magick->new;
$image->Set(size=>'500x200');
my $rc = $image->Read("xc:white");
my $str = 'Just Another Perl Hacker';
my (@words) = split ' ',$str;
#print join "\n",@words,"\n";
my ($x,$y) = (50,50);
foreach my $word (@words){
$image->Annotate(font=>'Generic.ttf',
pointsize => 24,
fill => '#000000ff', #last 2 digits transparency in hex ff=max
text => $word,
gravity => 'NorthWest',
align => 'left',
x => $x,
y => $y,
);
my ( $character_width,$character_height,$ascender,$descender,$text_width,
$text_height,$maximum_horizontal_advance, $boundsx1, $boundsy1,
$boundsx2, $boundsy2,$originx,$originy) =
$image->QueryFontMetrics(
pointsize => 24,
text => $word,
gravity => 'NorthWest',
align => 'left',
x => $x,
y => $y,
);
print "$word ( $character_width, $character_height,
$ascender,$descender,
$text_width, $text_height,
$maximum_horizontal_advance,
$boundsx1, $boundsy1,
$boundsx2, $boundsy2,
$originx,$originy)\n";
my $n = $x + $originx + $character_width/3; # add a space
print "Next word at: $x + $originx + $character_width/3 => $n\n";
$x = $n;
}
$image->Write("show:");
exit;