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.220

AUTHOR

Frank Seitz, http://fseitz.de/

COPYRIGHT

Copyright (C) 2024 Frank Seitz

LICENSE

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