Jan: Image::Magick -> QueryFontMetrics Rückgabewerte

Hallo,

ich habe eine Frage zu den Rückgabewerten der Funktion QueryFontMetrics.
Mein Code befindet sich ganz unten.

Zum Problem:
Für den Text "t" erhalte ich:

  
$VAR1 = '12';  
$VAR2 = '12';  
$VAR3 = '9';  
$VAR4 = '-3';  
$VAR5 = '4.421875';  
$VAR6 = '15';  
$VAR7 = '14';  
$VAR8 = '0.578125';  
$VAR9 = '0';  
$VAR10 = '4.46875';  
$VAR11 = '9';  
$VAR12 = '4';  
$VAR13 = '0';

Also ist die Breite 4.421875 oder?

für den Text "tt" wäre also die Breite 2x4.421875 = 8,84375
Allerdings erhalte ich als Ergebnis:

  
$VAR1 = '12';  
$VAR2 = '12';  
$VAR3 = '9';  
$VAR4 = '-3';  
$VAR5 = '8.421875';  
$VAR6 = '15';  
$VAR7 = '14';  
$VAR8 = '0.578125';  
$VAR9 = '0';  
$VAR10 = '4.46875';  
$VAR11 = '9';  
$VAR12 = '8';  
$VAR13 = '0';

Also 8.421875 statt 8,84375.
Wieso ist das so?
Ist es irgendwie möglich das ich die Breite einzelner Chars aufsummiere und somit das selbe Ergebnis erhalte wie wenn ich den gesamten Text in einem Stück berechnen lasse?

Ich benötige dies um die Länge eines Textes mit verschiedener Größen Breiten und Schriftarten zu messen.

Vielen Dank fürs lesen - und hoffentlich auch für Antworten ;)

Mein Code

  
  
use Image::Magick;  
use Data::Dumper;  
  
my $annotate_style  = 'Normal';  
my $annotate_weight	= '300';  
$g_image = new Image::Magick;  
$g_image -> ReadImage("xc:white");  
  
print Dumper(  
$g_image -> QueryFontMetrics(  
text		=> "t",  
x		=> 10,  
y		=> 10,  
font		=> 'AvantGarde-Book',  
pointsize	=> 12,  
fill		=> "black",  
antialias	=> true,  
align		=> 'Left',  
style		=> $annotate_style,  
weight		=> $annotate_weight  
)  
);
  1. Die Werte sind korrekt. Du bist eben Zeuge der Funktionsfähigkeit des TTF-Kernings bei ImageMagick geworden: wenn zwei mal "t" nebeneinander steht, rücken die Buchstaben ähnlich wie bei einer Ligatur zusammen.

    Gruß, LX

    --
    X-Self-Code: sh:( fo:) ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: Unusual
    X-Please-Search-Archive-First: Absolutely Yes
    1. Okay danke :)
      So etwas hatte ich mir schon fast gedacht - gibt es irgendeine Möglichkeit das zu berechnen?

      Und noch etwas - gibt es eine Angabe was die Rückgabewerte bedeuten?
      ($x_ppem, $y_ppem, $ascender, $descender, $width, $height, $max_advance)
      Kenne ich allerdings sind es 13 Parameter und nicht 7
      Wofür stehen die restlichen 5 Parameter?

      Jan

      1. Berechnen kann man das nur anhand des Fonts in Verbindung mit einem Renderer - oder eben mit der Funktion QueryFontMetrics, die Du ja schon benutzt. Die anderen Werte stellen übrigens die bounds und origins der Zeichen dar, die intern im Renderer für das Hinting und Kerning benutzt werden.

        Gruß, LX

        --
        X-Self-Code: sh:( fo:) ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
        X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
        X-Will-Answer-Email: Unusual
        X-Please-Search-Archive-First: Absolutely Yes
  2. Habe es lösen können:

    Text:
    'Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.'

    Berechnet wenn ich die einzelnen Werte zusammen zähle: 3438
    Berechnet durch Image::Magick : 3438.328125

    Die Lösung:

    Ich habe
    $VAR12 = '4'; aufsummiert statt $VAR5 = '4.421875';

    Danke trotzdem.

    Jan