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

NAME

Quiq::Gd::Image - Schnittstelle zur GD Graphics Library

BASE CLASSES

SYNOPSIS

  use Quiq::Gd::Image;
  
  my $img = Quiq::Gd::Image->new(100,100);
  $img->background('#ffffff');
  print $img->jpg;

DESCRIPTION

Die Klasse ist eine Überdeckung der Klasse GD::Image. Sie überschreibt existierende Methoden und ergänzt die Klasse um weitere Methoden. Die Klasse kann überall verwendet werden, wo GD::Image verwendet wird. Alle Methoden von GD::Image sind auch auf Quiq::Gd::Image-Objekte anwendbar.

Vorteile

Die Klasse Quiq::Gd::Image bietet folgende Vorteile:

  • Beliebig viele Farben, da alle Bilder per Default TrueColor sind. Bei GD sind Bilder per Default pallette-basiert mit maximal 256 Farben.

  • Die Klasse verfügt mit der Methode string() über eine einheitliche Schnittstelle zum Zeichnen von GD- und TrueType-Fonts, horizontal und vertikal. Bei GD werden GD- und TrueType-Fonts uneinheitlich behandelt.

  • Die Methoden der Klasse lösen im Fehlerfall eine Exception aus.

Unterschiede zwischen Palette-basierten und TrueColor-Bildern

Bei TrueColor liefert die GD-Methode colorAllocate() - mehrfach für denselben Farbwert aufgerufen - immer den gleichen Farbindex. Bei einem Palette-Bild wird immer ein neuer Farbindex geliefert, auch wenn der Farbwert gleich ist. Daher muss aus portablitätsgründen die GD-Methode colorResolve() genutzt werden. Diese Portabilität wird von der Methode color() sichergestellt.

Portierung einer existierenden Anwendung

  1. Konstruktor-Aufruf ersetzen:

      $img = Quiq::Gd::Image->new($width,$height);

    statt

      $img = GD::Image->new($width,$height);
  2. Nach dem Konstruktor-Aufruf die Hintergrundfarbe setzen:

      $white = $img->background(255,255,255);

    statt

      $white = $img->colorAllocate(255,255,255);
  3. Anwendung testen. Sie sollte fehlerfrei laufen.

Text in ein existierendes Bild schreiben

  use Quiq::Gd::Font;
  use Quiq::Gd::Image;
  use Quiq::Path;
  
  my $fnt = Quiq::Gd::Font->new('gdMediumBoldFont');
  my $img = Quiq::Gd::Image->new('bild.jpg');
  my $color = $img->color(255,0,0);
  $img->string($fnt,10,10,'TEST',$color);
  Quiq::Path->write('bild.jpg',$img->jpeg);

Hintergrund transparent machen

  my $img = Quiq::Gd::Image->new($width,$height);
  my $white = $img->background(255,255,255);
  $img->transparent($white);

METHODS

Konstruktor

new() - Instantiiere Bildobjekt

Synopsis

  $img = $class->new($file);
  $img = $class->new($data);
  $img = $class->new($width,$height);
  $img = $class->new($width,$height,$maxColors);

Returns

Bildobjekt

Description

Instantiiere ein Bildobjekt der Breite $width und der Höhe $height mit einer maximalen Anzahl von $maxColors Farben und liefere eine Referenz auf dieses Objekt zurück. Schlägt der Aufruf fehl, löse eine Exception aus.

Ist $maxColors nicht angegeben oder $maxColors > 256, wird ein TrueColor-Bild erzeugt, andernfalls ein palette-basiertes Bild mit maximal 256 Farben.

Die Methode blesst das Objekt auf die Klasse $class, da die Methoden newPalette() und newTrueColor() der Klasse GD::Image dies nicht tun!

Der Hintergrund eines TrueColor-Bildes ist schwarz. Eine andere Hintergrundfarbe wird mit background() gesetzt. Anders als bei einem palette-basierten Bild ist nicht die erste allozierte Farbe die Hintergrundfarbe!

See Also

Siehe "perldoc GD", Methoden newPalette(), newTrueColor().

Klassenmethoden

textImage() - Erzeuge Bild mit Text

Synopsis

  $img = $class->textImage($text,@opt);

Arguments

$text

Text, der in das Bild geschrieben wird.

Options

-background => $color (Default: 'white')

Hintergrundfarbe.

-color => $color (Default: 'white')

Textfarbe.

-font => $font (Default: 'gdGiantFont')

Font, in dem der Text gesetzt wird.

Returns

Bildobjekt

Description

Erzeuge ein Bild, das den Text $text enthält.

Objektmethoden

color() - Alloziere Farbe

Synopsis

  $color = $img->color;             # Default-Farbe
  $color = $img->color(undef);      # Default-Farbe
  $color = $img->color($n);         # Index, bereits allozierte GD-Farbe
  $color = $img->color($r,$g,$b);   # dezimal
  $color = $img->color(\@rgb);      # dezimal als Array-Referenz
  $color = $img->color('RRGGBB');   # hexadezimal
  $color = $img->color('#RRGGBB');  # hexadezimal

Aliases

  • colorAllocate()

  • colorResolve()

  • colorFindAllocate()

Returns

Farbe

Description

Alloziere Farbe in der Farbtabelle des Bildes und liefere den Index des Eintrags zurück. Existiert die Farbe bereits, liefere den existierenden Index.

See Also

"perldoc GD" Methode colorResolve()

background() - Alloziere Farbe und setze Hintergrund

Synopsis

  $color = $img->background(@color);

Returns

Farbe

Description

Alloziere Farbe @color, fülle das gesamte Bild mit der Farbe und liefere den Farbindex zurück.

Zu den möglichen Angaben für @color siehe Methode $img->color().

Der Hintergrund eines TrueColor-Bildes ist anfänglich schwarz. Anders als bei einem Palette-basierten Bild wird nicht die erste allozierte Farbe automatisch die Hintergrundfarbe. Daher sollte die erste Farbe mit dieser Methode alloziert werden, damit gleichzeitig die Hintergrundfarbe gesetzt wird.

border() - Zeichne inneren Rahmen um das Bild

Synopsis

  $img->border($color);

Returns

Nichts

Description

Zeichne einen inneren Rahmen in Farbe $color um das Bild. "Innerer Rahmen" bedeutet, dass der Rahmen Teil des Bildes ist und nicht außen um das Bild herumgelegt ist.

drawCross() - Zeichne ein Kreuz

Synopsis

  $img->drawCross($x,$y,$color);

string() - Zeichne Zeichenkette horizontal oder vertikal

Synopsis

  $img->string($font,$x,$y,$string,$color,@opt);

Options

-up => $bool (Default: 0)

Schreibe den Text nicht horizontal sondern vertikal.

Returns

Nichts

Description

Zeichne Zeichenkette $string an Position ($x,$y). Die Zeichenkette kann mehrzeilig sein.

Der Font ist ein Quiq::Gd::Font-Objekt. Diese Klasse vereinheitlicht GD- und TrueType-Fonts. GD-Fonts können nicht in beliebigem Winkel, sondern nur horizontal und vertikal geschrieben werden, daher erlaubt die Methode nur diese beiden Ausrichtungen.

Die Position ($x,$y) ist in beiden Ausrichtungen die linke Ecke oberhalb des ersten Zeichens.

  horizontal          vertikal
  
  ($x,$y)
     x---------+         +---+
     | ....... |         | . |
     +---------+         | . |
                         | . |
                         | . |
                         | . |
                 ($x,$y) x---+

stringUp() - Zeichne Zeichenkette vertikal

Synopsis

  $img->stringUp($font,$x,$y,$string,$color);

Returns

Nichts

Description

Die Methode ist die font-portable Überdeckung für die gleichnmige Methode in der GD-Bibliothek.

stringCentered() - Zeichne Zeichenkette horizontal oder vertikal zentriert

Synopsis

  $img->stringCentered($font,$orientation,$x,$y,$string,$color);

rainbowColors() - Alloziere Regenbogenfarben-Palette

Synopsis

  @colors | $colorA = $img->rainbowColors($n);

Returns

Array von Farben

Description

Alloziere eine Palette von $n Regenbogenfarben (Blau nach Rot) und liefere die Liste der Farbtabellen-Indizes zurück.

Werte für $n: 4, 8, 16, 32, 64, 128, 256, 512, 1024.

Die Regenbogenfarben können verwendet werden, um die Werte eines Wertebereichs in einen Farbverlauf zu übersetzen.

  Farbe     % Wertebereich  R   G   B
  --------- -------------- --- --- ---
  Blau             0        0   0  255
                                |        G-Anteil nimmt zu
  Hellblau        25        0  255 255
                                    |    B-Anteil nimmt ab
  Gruen           50        0  255  0
                            |            R-Anteil nimmt zu
  Gelb            75       255 255  0
                                |        G-Anteil nimmt ab
  Rot            100       255  0   0

VERSION

1.196

AUTHOR

Frank Seitz, http://fseitz.de/

COPYRIGHT

Copyright (C) 2021 Frank Seitz

LICENSE

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