First, thanks for your answers and for the very useful code samples. My problem is now solved as it was due to an approximation of floats (not linked to ImageMagick), coupled to the use of a non-standard font.
Thanks again Regards Benoît Le 4/12/08 18:04, « zentara » <[EMAIL PROTECTED]> a écrit : > On Thu, 4 Dec 2008 09:39:34 +1000 > Anthony Thyssen <[EMAIL PROTECTED]> wrote: > > >> Very useful script for experimentation... >> >> I have saved the above script in IM examples, scripts area, with >> minor modifications to make it more verbose. >> http://www.imagemagick.org/Usage/scripts/annotate_words.pl >> >>> From the output I notice that the caret moves forward by 'originx' >> but that originx is really only the integer ceiling of 'text_width' >> >> 1/ have you tried to draw from a non-integer starting point and >> did it work? That is can words (or characters within the words) >> be drawn at non-integer increments. The fonts are after all defined >> in terms of vectors with lots of internal floating point curve >> positions. >> >> 2/ Have you tried the above with a highly non-standard font like >> "lokicola" and many symbol fonts ? That is a font that regularly >> overflows the bounds they themselves define for the characters >> drawing area. Can you figure out the text's real drawing area? >> >> The test is to draw the bounds in a colored rectangle, then draw the >> text over the top of this to see how well they match up. >> >> >> Anthony Thyssen ( System Programmer ) <[EMAIL PROTECTED]> > > Here is a more general purpose script for experimentation. > I did notice that rotations, and mixing different font families > can give inconsistent results. It seems that rotations and skewing > can be tricky to deal with, probably some trigonometric calculations are > needed to avoid collisions. But is you stick with a constant font, it works > pretty well, as long as you don't rotate. > > > #!/usr/bin/perl > use warnings; > use strict; > use Image::Magick; > > my $image = Image::Magick->new; > $image->Set(size=>'800x400'); > my $rc = $image->Read("xc:white"); > > my $str = 'Just Another Perl Hacker and not another c slacker'; > my (@words) = split ' ',$str; > #print join "\n",@words,"\n"; > > #shuffled options > my @styles = map {$_->[0]} > sort { $a->[1] <=> $b->[1]} > map {[$_, rand(1)]} qw(Normal Italic Oblique Any); > > my @stretch = map {$_->[0]} > sort { $a->[1] <=> $b->[1]} > map {[$_, rand(1)]} > qw(Normal UltraCondensed ExtraCondensed Condensed SemiCondensed > SemiExpanded Expanded ExtraExpanded UltraExpanded); > > # on linux from xlsfonts > #my @fonts = qw(-mozilla-arial-bold-r-normal--30-180-100-100-p-153-iso8859-1 > # > -mozilla-courier-medium-i-normal--24-180-100-100-m-113-iso8859-1 > # -adobe-courier-bold-o-normal--11-80-100-100-m-60-iso8859-1 > # ); > > my @fonts = qw( > -mozilla-arial-*-*-*--*-180-100-100-p-153-iso8859-1 > -mozilla-courier-*-*-*--*-180-100-100-m-113-iso8859-1 > -mozilla-helvetica-*-*-*--*-150-100-100-p-131-iso8859-1 > # -adobe-courier-*-*-*--*-80-100-100-m-60-iso8859-1 > # -adobe-utopia-*-*-*--*-140-75-75-p-79-iso8859-14 > #-adobe-times-*-*-*--*-240-75-75-p-124-iso8859-2 > ); > > > my @fill = qw(black green red blue purple); > > my @points = map {$_->[0]} > sort { $a->[1] <=> $b->[1]} > map {[$_, rand(1)]} > qw(12 14 16 18 20 22 24 26 28 30); > > # starting point > my $x = 50; > my $y = 50; > my $toggle = -1; > > # make up a random layout of words > foreach my $word (@words){ > push (@styles,shift(@styles)); #circular lists > push (@stretch,shift(@stretch)); > push (@fill,shift(@fill)); > push (@points,shift(@points)); > push (@fonts,shift(@fonts)); > > $toggle *= -1; > > my $pointsize = $points[0]; > my $scale = (1 + int rand 3).','.(1 + int rand 3); > my $rotata = 0; #$toggle * int rand 45; > my $skewx = $toggle * (1 + int rand 15); > my $skewy = $toggle * (1 + int rand 15); > my $fill = $fill[0]; > my $font = $fonts[0]; > > my %options =( > align => 'left', > antialias => 1, > pointsize => $pointsize, > fill => $fill, > # scale => $scale, > text => $word, > gravity => 'NorthWest', > x => $x, > y => $y, > skewx => $skewx, > skewy => $skewy, > rotate => $rotata, > font => $font, > ); > > > my ( $character_width,$character_height,$ascender,$descender,$text_width, > $text_height,$maximum_horizontal_advance, $boundsx1, $boundsy1, > $boundsx2, $boundsy2,$originx,$originy) = > $image->QueryFontMetrics( %options ); > > print "__________ $word starts at ___________$x\n"; > > print "( > char_width->$character_width, > char_height->$character_height, > ascender->$ascender, > descender->$descender, > width ->$text_width, > text_height->$text_height, > max_horizontal_advance->$maximum_horizontal_advance, > boundsx1->$boundsx1, > boundsy1->$boundsy1, > boundsx2->$boundsx2, > boundsy2->$boundsy2, > originx->$originx, > originy->$originy )\n"; > > $image->Annotate( %options ); > > $x = $x + $text_width + $character_width/3; # add a space > > } > > > $image->Write("$0.png"); > > exit; > __END__ > > zentara _______________________________________________ Magick-users mailing list [email protected] http://studio.imagemagick.org/mailman/listinfo/magick-users
