summaryrefslogtreecommitdiff
path: root/PerlMagick/demo/annotate_words.pl
blob: 3b76b1d1bc7f0828f07a44a47aa182f2714b5878 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#!/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;