forked from openkylin/imagemagick
72 lines
1.9 KiB
Perl
Executable File
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;
|
|
|