The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Quiq::Gd::Font - GD- oder TrueType-Font

BASE CLASS

Quiq::Hash

DESCRIPTION

Abstraktion für GD- und TrueType-Fonts, die von GD nicht gemacht wird.

Geometrie der (monospaced) GD-Fonts

  Name             Breite Höhe
  ---------------- ------ ----
  gdTinyFont         5      8
  gdSmallFont        6     13
  gdMediumBoldFont   7     13
  gdLargeFont        8     16
  gdGiantFont        9     15

EXAMPLES

  • GD-Font instantiieren

      $fnt = Quiq::Gd::Font->new('gdSmallFont');
  • TrueType-Font instantiieren

      $fnt = Quiq::Gd::Font->new('/opt/fonts/pala.ttf',20);

METHODS

Konstruktor

new() - Instantiiere GD- oder TrueType-Font

Synopsis

  $fnt = $class->new($name);
  $fnt = $class->new($name,$pt);
  $fnt = $class->new("$name,$pt");
  $fnt = $class->new($fnt);

Description

Instantiiere GD- oder TrueType-Font und liefere eine Referenz auf dieses Objekt zurück. Wird bei einem TrueType-Font keine Fontgröße angegeben, wird 10pt angenommen.

Ein TrueType-Font kann auch mit einem einzigen Argument - als Arrayreferenz [$name,$pt] - angegeben werden.

Wird ein bereits instantiiertes Font-Objekt als Parameter übergeben, wird dieses einfach zurückgeliefert.

Primitive Operationen

name() - Name des Font

Synopsis

  $name = $fnt->name;

Description

Liefere den Namen des Font. Bei einem GD-Font ist dies der Name, wie er beim Konstruktor angegeben wurde. Bei einem TrueType-Font ist es der Grundname der Datei, also ohne Pfad und Endung .ttf.

pt() - Größe des Font

Synopsis

  $pt = $fnt->pt;

Description

Liefere die Größe des Font. Bei einem GD-Font undef, bei einem TrueType-Font die Größe in pt.

isTrueType() - Prüfe auf TrueType-Font

Synopsis

  $bool = $fnt->isTrueType;

Description

Liefere 1 wenn der Font ein TrueType-Font ist, liefere 0, wenn er ein GD-Font ist.

stringGeometry() - Liefere den Platzbedarf einer Zeichenkette

Synopsis

  ($width,$height,$xOffset,$yOffset) = $fnt->stringGeometry($str,@opt);

Options

-up => $bool (Default: 0)

Schreibe den Text aufrecht.

-debug => $bool (Default: 0)

Gib Informationen auf STDDER aus.

Description

Liefere den Platzbedarf (Breite, Höhe) und den x- und y-Offset der Zeichenkette $str.

Geometrie

TrueType-Fonts können um einen beliebigen Winkel gedreht werden.

          4,5
          /\
         /  \
        /  T \ 2,3
       /  X  /
  6,7 /  E  /
      \ T  /
       \  /
        \/
        0,1
  
  $width = $bounds[2]-$bounds[6]
  $height = $bounds[1]-$bounds[5]
  $xOffset = -$bounds[6]
  $yOffset = $up? 0: -$bounds[5]

Von dieser Möglichkeit machen wir allerdings keinen Gebrauch. Wir lassen lediglich 0 und 90 Grad zu. Das sind die Möglichkeiten, die die GD-Fonts erlauben.

charWidth() - Liefere (maximale) Breite eines Fontzeichens

Synopsis

  $width = $fnt->charWidth(@opt);

Alias

width()

Options

-up => $bool (Default: 0)

Vertikaler Text.

Description

Liefere die maximale Breite eines Fontzeichens.

Da die GD-Fonts fixed/monospaced Fonts sind, ist die Breite aller Zeichen gleich.

Bei TrueType-Fonts wird die Breite der Zeichenkette "M" ermittelt.

charHeight() - Liefere (maximale) Höhe eines Fontzeichens

Synopsis

  $height = $fnt->charHeight(@opt);

Alias

height()

Options

-up => $bool (Default: 0)

Vertikaler Text.

Description

Liefere die maximale Höhe eines Fontzeichnes.

Da die GD-Fonts fixed/monospaced Fonts sind, ist die Höhe aller Zeichen gleich.

Ist der Font ein TrueType-Font wird die Höhe der Zeichenkette "Xy" bestimmt.

digitWidth() - Liefere Breite einer Ziffer

Synopsis

  $width = $fnt->digitWidth(@opt);

Options

-up => $bool (Default: 0)

Vertikaler Text.

Description

Liefere die Breite einer Ziffer. Alle Ziffern eines Font sollten dieselbe Breite haben. Für GD-Fonts ist dies ohnehin der Fall. Bei TrueType-Fonts ermitteln wir die Breite der "0".

digitHeight() - Liefere Höhe einer Ziffer

Synopsis

  $height = $fnt->digitHeight(@opt);

Options

-up => $bool (Default: 0)

Vertikaler Text.

Description

Liefere die Höhe einer Ziffer. Alle Ziffern eines Font sollten dieselbe Höhe haben. Für GD-Fonts ist dies ohnehin der Fall. Bei TrueType-Fonts ermitteln wir die Höhe der "0".

stringWidth() - Horizontaler Platzbedarf einer Zeichenkette

Synopsis

  $n = $fnt->stringWidth($str,@opt);

Options

-up => $bool (Default: 0)

Vertikaler Text.

Description

Liefere den horizontalen Platzbedarf der Zeichenkette $str.

stringHeight() - Vertikaler Platzbedarf einer Zeichenkette

Synopsis

  $n = $fnt->stringHeight($str,@opt);

Options

-up => $bool (Default: 0)

Vertikaler Text.

Description

Liefere den horizontalen Platzbedarf der Zeichenkette $str.

Alignment

Die folgenden Methoden liefern den Offset, der benötigt wird, wenn ein Text eng an eine rechte oder obere Grenze ausgerichtet werden soll, wie z.B. bei der Beschriftung einer X- oder Y-Achse.

Die Offsets sind Font-abhängig. Für die GD-Fonts und den TrueType-Font pala bis 20pt ist der Offset ausgearbeitet. Für andere TrueType-Fonts und Fontgrößen müssen die Methoden u.U. erweitert werden.

alignRightOffset() - Korrektur-Offset für Ausrichtung an rechten Rand

Synopsis

  $n = $g->alignRightOffset;

Description

Der Korrektur-Offset ist so bemessen, dass der Text möglichst dicht an einen rechten Rand angrenzt, z.B. das Label an den Tick einer Y-Achse.

alignLeftOffset() - Korrektur-Offset für Ausrichtung an linkem Rand

Synopsis

  $n = $g->alignLeftOffset;

Description

Der Korrektur-Offset ist so bemessen, dass der Text möglichst dicht an einen linken Rand angrenzt, z.B. das Label an den Tick einer Y-Achse auf der rechten Seite.

alignTopOffset() - Korrektur-Offset für Ausrichtung an oberen Rand

Synopsis

  $n = $g->alignTopOffset;

Description

Der Korrektur-Offset ist so bemessen, dass der Text möglichst dicht an einen oberen Rand angrenzt, z.B. das Label an den Tick einer X-Achse.

hCenterOffset() - Korrektur für horizontal zentrierten Text

Synopsis

  $n = $fnt->hCenterOffset;

Description

Bei horizontal zentriertem Text ist manchmal eine Korrektur nötig, die diese Methode liefert.

VERSION

1.165

AUTHOR

Frank Seitz, http://fseitz.de/

COPYRIGHT

Copyright (C) 2019 Frank Seitz

LICENSE

This code is free software; you can redistribute it and/or modify it under the same terms as Perl itself.