]> granicus.if.org Git - imagemagick/commitdiff
(no commit message)
authoranthony <anthony@git.imagemagick.org>
Thu, 22 Mar 2012 00:09:16 +0000 (00:09 +0000)
committeranthony <anthony@git.imagemagick.org>
Thu, 22 Mar 2012 00:09:16 +0000 (00:09 +0000)
PerlMagick/demo/annotate_words.pl [new file with mode: 0755]

diff --git a/PerlMagick/demo/annotate_words.pl b/PerlMagick/demo/annotate_words.pl
new file mode 100755 (executable)
index 0000000..fcb0905
--- /dev/null
@@ -0,0 +1,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(
+         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;
+