Grafik mit PHP

OpenSource Pixel- und Objekt-Grafik

Die GD-Library ist die weltweit bekannteste OpenSource-Bibliothek zur Erzeugung und Bearbeitung von Pixel-Grafik. Zahlreiche Programme und Programmiersprachen (C++, Perl, PHP, ...) verwenden diese Bibliothek. Die Anwendung umfasst die Manipulation bestehender Pixel-Grafik, und die 'programmierte' Erstellung neuer Grafik.
Eine Alternative für Objekt-Grafik bietet SVG, ebenfalls leicht mit PHP herzustellen.
PHP Hypertext Processor PHP PHP Hypertext Processor
Installation Installation der GD-Library für PHP auf Linux (LAMP) und Windows (WAMP)
Information Daten über die installierte Version der GD-Library
image Das image-Objekt der GD-Library
GIF Bearbeitung von Bildern im Format GIF
JPEG Bearbeitung von Bildern im Format JPEG
PNG Bearbeitung von Bildern im Format PNG
Debug Fehler bei der Grafik-Programmierung finden, anzeigen und beseitigen
TrueType Verwendung beliebiger TrueType-Schriften
String Grafik als Datenstrom senden oder in einer Datenbank speichern.
SVG Dynamische Erstellung von SVG-Objekt-Grafik mit PHP
Beispiele Analemma (Sonnenuhr-Gleichung), Farben-Addition und -Subtraktion, HSB-Farbscheibe, Julia-Menge, Mandelbrot-Menge,, Regenbogen-Farben, Schwarzkörper-Farben glühender Körper, Uhr, Zeitgleichung(Astronomie), ...
Links Ausgewählte GD-Library-Links Links zum Thema 'GD-Library'

Pixel- und Objekt-Grafik mit PHP

Pixel-Grafik (Raster-Grafik)

Ein Bild wird durch zahlreiche einzelne Farb-Punkte (Pixel) dargestellt. Jeder Punkt ist durch Position und Farbe bestimmt.
Es gibt mehrere Bibliotheken von Programmen zur Herstellung und Bearbeitung von Pixel-Grafik.
Die XY-Koordinaten zur Angabe der Position werden von links oben gemessen.
Die Farbe wird entweder im → RGB-System angegeben (3 Zahlen 0...255 für Rot, Grün, Blau) oder im → FarbIndex-System (1 Zahl 0..255 pro Pixel).
Typische Pixel-Grafik: Menschen, Tiere, Blumen, Landschaft - z.B. mit Digital-Camera oder Scanner hergestellt.
Solche Bilder kann man mit (PHP)-Programmen bearbeiten, z.B.:
Verkleinern (Thumbnails), Filter anwenden (Helligkeit, Konstrast, Schärfe), Wasserzeichen oder Text eintragen, ...
Diese Beispiele wurden mit PHP-Programmen erzeugt.
Das ist sinnvoll, wenn man Regeln oder Formeln zur Herstellung angeben kann, und wenn dabei komplizierte Formen oder Farb-Mischungen auftreten. Für einfache Formen verwendet man besser ↓ Objekt-Grafik.
Quelle: Boutell.com (modif)

GD-Library

Die GD-Library von Thomas Boutell (rechts) ist die am weitesten verbreitete Bibliothek von Programmen für Pixel-Grafik. Die GD-Library gibt es in zahlreichen kostenfreien Versionen für alle gängigen Betriebssysteme und Programmiersprachen, darunter auch → C++, Perl, PHP
Für dieses Web wird fast ausnahmslos die GD-Library verwendet, und zwar sowohl zur einmaligen Herstellung von 'berechneter' Pixel-Grafik (z.B. der gezeigten Farb-Balken und -Scheiben) als auch zur Live-Herstellung von dynamischer Pixel-Grafik.

ImageMagick

ist eine Bibliothek von Pixel-Grafik Programmen. ImageMagick gibt es nicht nur als Bibliothek für alle modernen Programmiersprachen (PHP), sondern auch als alleinstehendes (Konsolen)-Programm zur Manipulation von Grafik-Dateien.
Spezialität: ImageMagick kann mehr als 100 verschiedene Grafik-Formate umwandeln und bearbeiten, bietet jedoch auch Funktionen zur Bearbeitung (Filter, ...).

Objekt-Grafik

Ein Bild besteht aus Grafik-Objekten, die durch Anweisungen beschrieben werden.
Beispiele für Grafik-Objekte: Linien, Kreise, Rechtecke, Text, PixelGrafik-Schnipsel (Snippets).
Einfache Objekte kann man zu beliebig komplexen Objekten zusammensetzen (z.B. zu einer Schraube, Motor, Auto, Flugzeug...)
Es gibt mehrere Methoden, um ObjektGrafik-Anweisungen zu formulieren. Der wichtigste Standard → SVG (Scalable Vector Graphics) wird u.a. von allen modernen Browsern unterstützt.
Objekt-Grafik (Vector-Grafik) kann man verlustfrei (!) transformieren, z.B. skalieren (vergrößern), drehen, ...
Die Objekte lassen sich beliebig anordnen, gruppieren, ausrichten oder in Schichten übereinander legen.
Mit der Programmiersprache Javascript kann man SVG Live manipulieren, z.B. Objekte erzeugen, ihre Eigenschaften ändern, Animationen durchführen usw.
Dieses Beispiel zeigt eine einfache SVG-Grafik aus 4 Objekten (Kreis, Rechteck, Dreieck, Text).
Rechts der SVG Quelltext dieser Grafik.
Mit PHP oder jeder anderen modernen Programmiersprache kann man SVG-Text genauso einfach erzeugen wie HTML-Text.
SVG-Grafik kann man in jede moderne XHTML-Webseite direkt (inline) einbetten. Der Browser (an ihrem Client-PC) erzeugt aus den Anweisungen das sichtbare Bild (= die Bildpunkte am Monitor).

Cairo

Alle neueren PHP-Versionen enthalten diese Bibliothek, die zahlreiche Funktionen zur Herstellung von SVG Objekt-Grafik bietet.
Details zu SVG Objekt-Grafik
SVG-Quelltext der links gezeigten Objekt-Grafik
<circle cx="50" cy="50" r="20" fill="red"/>
<rect x="15" y="15" width="30" height="30" fill="blue"/>
<g transform="translate(60,30)">
<polygon id="dreieck" points="-20,11 20,11 0,-23" fill="#0F0" />
</g>
<g font-family="Verdana, sans-serif">
<text font-size="18" x="60" y="30" stroke="#000">SVG</text>
</g>
→ SVG wird von allen modernen Browsern unterstützt. Lediglich die veralteten Versionen des MSIE-Browsers können kein SVG anzeigen.

GD-Library: Information und Test

Modul 'gd'

Mit diesem Test können sie feststellen, ob die GD-Library in ihrer PHP Arbeits-Umgebung korrekt installiert ist.
Details zum Thema PHP-Module.
$gd_ok = 0;
if (extension_loaded('gd')) {$gd_ok++;}
Live-Live-PHP-PHP:
$gd_ok = 1
Modul 'gd' ist geladen.

Modul ImageMagick (imagick)

Dieses Modul bietet anspruchsvolle Grafik-Funktionen, die über den Umfang der GD-Library weit hinausgehen.
Insbesondere kann ImageMagick >90 verschiedene Grafik-Formate verarbeiten.
Die Funktionen beanspruchen jedoch wesentlich mehr Prozessor-Zeit und sind deshalb bei üblichen Web-Providern nicht installiert - Deshalb werden Imagick Funktionen hier nicht demonstriert.

Für die Verwendung am eigenen PC oder Server ist ImageMagick jedoch sehr empfehlenswert, z.B. zur halb- oder vollautomatischen Verarbeitung von Digital-Camera Bildern.
Das Modul bietet die Möglichkeit, die Funktionen professioneller Grafik-Programme auf Webseiten auszuführen.

Dynamisches Laden zur Laufzeit

Für Web-Provider ist es vorteilhaft, nur die wichtigsten PHP-Module ständig zu laden. PHP wird dadurch schlanker und schneller. Zusätzliche Module können dann mit Funktion dl (Argument = Dateiname gd.so (Linux) oder php_gd2.dll (Windows)) zur Laufzeit geladen werden.
Danach sind Modul und Funktionen bis zum Ende der Script-Datei verfügbar.
Details zum Thema PHP-Module.
So wird Modul gd zur Laufzeit geladen:
if (!extension_loaded('gd')) {
dl('gd.so');
}
if (extension_loaded('gd')) {$gd_ok++;}
Live-Live-PHP-PHP:
$gd_ok = 1
Modul 'gd' ist geladen.

gd-Information

Funktion gd_info() der GD-Library gibt ein → Array mit Daten zur aktuell installierten Version zurück:
$i["GD Version"] = 2.0
$ia["FreeType Support"] = 1
$i["FreeType Linkage"] = with freetype
$ia["T1Lib Support"] = 1
$ia["GIF Read Support"] = 1
$ia["GIF Create Support"] = 1
$ia["JPEG Support"] = 1
$ia["PNG Support"] = 1
$ia["WBMP Support"] = 1
$ia["XPM Support"] =
$ia["XBM Support"] =
$ia["JIS-mapped Japanese Font Support"] =
PHP-Code zur Ausgabe aller Array-Elemente, die von Funktion gd_info() zurückgegeben werden (vereinfacht).

$ia = gd_info();
foreach($ia as $k => $v) {
print "ia['$k'] = $v <br />";
}

Links die Live-Live-PHP-PHP-Daten.
So wird eine Liste aller Funktionen des Moduls gd erzeugt:
$func = get_extension_funcs('gd');
$c = count($func);
print "Liste der $c Funktionen: <br />";
sort($func);
foreach ($func as $f) {print "$f, ";}
print '<br />';

Links das Live-Live-PHP-Ergebnis.

GIF:

Aus lizenzrechtlichen Gründen waren die Funktionen zum Schreiben von GIF-Dateien in älteren GD-Versionen nicht enthalten. Das umstrittene Patent von Unisys ist jedoch 2004 abgelaufen.
Testen sie diese Funktionen, oder verwenden sie besser PNG - dieses Grafik-Format ersetzt GIF und ist in seinen technischen Möglichkeiten weit überlegen.
Details zum Thema PHP-Grafik-GIF.
$gif_ok = 0;
$func = get_extension_funcs('gd');
if (in_array('imagegif',$func)) {$gif_ok++;}
Live-Live-PHP-PHP:
$gif_ok = 1
Funktion 'imagegif' ist verfügbar

Test-Grafik:

Als weiteren Test können sie eine kleine Grafik erstellen und auf einer Webseite anzeigen.
Beispiele dazu finden sie auf den PHP-Grafik-Seiten (↑ Inhaltsverzeichnis).
Live von PHP erzeugt
Diese Test-Grafik im Format → JPEG wurde mit PHP und gdlib aus einem Bild und einem Text erstellt. Als Beweis der dynamischen Erzeugung dient die Uhrzeit (am Server).

Zugriffsrechte:

PHP kann nur dann eine (Grafik)-Datei schreiben, wenn die Zugriffsrechte in diesem Verzeichnis freigegeben wurden.
Erstellen sie dafür aus Sicherheitsgründen ein eigenes Verzeichnis, in dem sich nur temporär von PHP erstellte Dateien befinden.
Alternative: Erzeugen sie keine Dateien, sondern senden sie die Grafik als → Datenstrom (String).

Browser-Cache:

Jeder Browser versucht, eine Grafik aus seinem Cache-Speicher zu laden und nicht live anzufordern.
Das können sie unterbinden, indem sie jedesmal neue → Zufallsnamen für die Grafik-Datei vergeben.
Im Server-Verzeichnis für temporäre Grafik-Dateien müssen sie nicht mehr benötigte Dateien wieder → löschen, am besten am Beginn oderr Ende jenes Script-Programms, welches eine neue Grafik erzeugt.

Perl

Die GD-Library kann man auch mit der Programmiersprache → Perl verwenden. Das Perl-GD-Modul ist zwar in den meisten Linux-Distributionen enthalten, nicht jedoch in der → Windows-Distribution von ActivePerl. Für Windows muss man das Perl-Modul aus dem Internet laden.

Konsolen-Programm

ImageMagick ist auch als Konsolen-Programm verwendbar, d.h. die Funktionen können auch ohne PHP direkt auf einer Linux-shell oder Windows-"Eingabeaufforderung" cmd.exe ausgeführt werden.
Das öffnet eine Möglichkeit zur Automatisierung der Bildverarbeitung.

Ausgewählte Links zu den Themen 'GD-Library' und 'PHP@Grafik'

Boutell.com - Die Homepage der GD-Library von Thomas Boutell
ImageMagick.org - Homepage der ImageMagick Library

PHPnet - Grafik-Funktionen
Wikipedia Wikipedia: GD-Library, ImageMagick
PHP Builder: Image functions
PHPfreaks - GD-Tutorial, GD-Thumbnails
PHP-Forum (de) - Grafik-Funktionen
SelfPHP
 

Letzte Änderung dieser Seite: 2012-03-09 12:55:04