PHP: Intelligente Bildbearbeitung im Live-Projekt mit PHPImageWorkshop

Kein Beitragsbild

Denis Potschien

Denis Potschien ist seit 2005 freiberuflich als Kommunikationsdesigner tätig, seit Anfang 2010...

Bilder müssen für ein Webprojekt oft bearbeitet werden. Da ist es nötig, Bilder zuzuschneiden, zu verkleinern oder mit einem Wasserzeichen zu versehen. Vieles geschieht in Bildbearbeitungsprogrammen wie Photoshop. Hier und da ist es jedoch sinnvoll, die Bildbearbeitung automatisiert über ein Script laufen zu lassen. PHPImageWorkshop ist eine Bibliothek, die nützliche Funktionen zur serverseitigen Bildbearbeitung zur Verfügung stellt.


PHPImageWorkshop

Voraussetzung und Installation

PHPImageWorkshop besteht aus einer einzelnen PHP-Datei, die eingebunden werden muss, um die darin enthaltene Klasse „ImageWorkshop“ nutzen zu können. Da in der PHP-Datei der Namespace „PHPImageWorkshop“ definiert wurde, muss dieser beim Aufruf der Klasse immer mit angegeben werden:

require_once("ImageWorkshop.php");

$neuesbild = new \PHPImageWorkshop\ImageWorkshop();

Alternativ kann die Zeile mit der Namespace-Angabe auch auskommentiert werden. Dann kann die Klasse auch ohne diese Angabe verwendet werden. In der Dokumentation und den Beispielen wird immer ohne Verweis auf den Namespace gearbeitet:

$neuesbild = new ImageWorkshop();

Die Bildbearbeitung erfolgt über die GD-Library, die in den meisten PHP-Installationen von Haus aus mit dabei ist. Außerdem setzt PHPImageWorkshop die PHP-Version 5.3.x voraus.

Bilder skalieren und beschneiden

Oft wird eine serverseitige Bildbearbeitung eingesetzt, wenn ea darum geht, Bilder zu skalieren oder zu beschneiden – zum Beispiel für die Erzeugung von Thumbnails. PHPImageWorkshop bietet hierzu verschiedene Funktionen an. Um Bilder zu skalieren, gibt es die Funktionen resizeInPixel() und resizeInPourcent():

$thumbnail = new ImageWorkshop(array(
  "imageFromPath" => "bild.jpg"
));

$thumbnail->resizeInPixel(200, 100);

$bildausgabe = $thumbnail->getResult();

Zunächst wird einer Variablen eine neue Instanz der „ImageWorkshop“-Klasse inklusive Pfad zum Originalbild zugewiesen. Anschließend wird über resizeInPixel() das Bild auf 200 x 100 Pixel skaliert. Im letzten Schritt überführt man das skalierte Bild in die Variable $bildausgabe, welche dann über die PHP-Funktion imagejpeg() ausgegeben werden kann:

imagejpeg($bildausgabe, null, 95);

Statt einen Wert für Höhe und Breite anzugeben, kann auch nur einer der Werte angegeben werden. So verkleinert man das Bild proportional, wenn der zusätzliche dritte Parameter der Resize-Funktion auf true gesetzt ist:

Kennst du unser E-Book-Bundle? Spare jetzt 6,99 €!

E-Book Bundle von Andreas Hecht
$thumbnail->resizeInPixel(200, null, true);

Analog zur Funktion resizeInPixel() existiert die Variante resizeInPourcent(), die statt Angaben in Pixel Prozentwerte berücksichtigt.


Bilder skalieren

Bei den Resize-Funktionen wird immer der gesamte Bildinhalt dargestellt. Wenn es darum geht, das Seitenverhältnis des zu skalierenden Bildes zu ändern, ohne das Bild in seiner Darstellung zu verzerren oder nur einen Teilbereich eines Bildes zu zeigen, gibt es die Beschneidungsfunktionen cropInPixel() und cropInPourcent():

$thumbnail->cropInPixel(200, 200, 100, 200, "LT");

Angegeben werden die Maße des Bildes (hier 200 x 200 Pixel), die Start-Koordinaten des darzustellenden Bildausschnittes (hier 100 Pixel von links, 200 Pixel von oben) sowie die Position (hier „LT“).


Bilder beschneiden

Die Position gibt an, von welcher Stelle des Bildes aus der Ausschnitt gewählt werden soll. „LT“ steht für „left top“, also die linke obere Ecke des Bildes. Bei „RB“ („right bottom“) würde von der rechten unteren Ecke ausgegangen werden.

Bilder kombinieren

Neben dem Skalieren und Beschneiden ist auch das Kombinieren von mehreren Bildern eine oft verwendete Funktion bei der serverseitigen Bildbearbeitung. Auch hierzu bietet PHPImageWorkshop eine leicht zu verwendende Funktion:

$bild_mit_logo = new ImageWorkshop(array(
  "imageFromPath" => "bild.jpg",
));

$logo = new ImageWorkshop(array(
  "imageFromPath" => "logo.png",
));
$bild_mit_logo->addLayer(1, $logo, 10, 10, "LB");

$bildausgabe = $logo_mit_bild->getResult();


Bilder kombinieren

Im Beispiel werden zwei Bilddateien per ImageWorkshop Variablen zugewiesen. Anschließend wird die Logodatei per addLayer() auf das Bild gelegt. Dabei wird die Position sowie die Ausrichtung des Logos angegeben, im Beispiel jeweils 10 Pixel von der linken unteren Ecke („LB“) entfernt.

Fazit

PHPImageWorkshop ist schnell in ein Webprojekt eingebunden. Dabei ist die Datei keine 100 Kilobyte groß. Die Funktionen, die zur Verfügung stehen, lassen sich zwar auch mit PHP-Bordmitteln nachbauen. Mit PHPImageWorkshop geht es jedoch schneller und einfacher, da viele Zwischenschritte die ImageWorkshop-Klasse übernimmt und daher nicht manuell berücksichtigt werden müssen.

(dpe)

Denis Potschien

Denis Potschien ist seit 2005 freiberuflich als Kommunikationsdesigner tätig, seit Anfang 2010 im Kreativkonsulat in Iserlohn, einem Büro für Gestaltung und Kommunikation. Dort betreut er kleine und mittelständische Unternehmen ebenso wie kommunale Körperschaften und Organisationen aus Südwestfalen und dem Ruhrgebiet. Als Webdesigner und -entwickler gehören HTML5 und CSS3 zu seinen Kernthemen, weshalb er dazu 2013 ein Buch geschrieben hat. „Pure HTML5 und CSS3“ richtet sich an alle, die Vorkenntnisse haben, sich aber bisher mit HTML5 und CSS3 nicht oder nur am Rande beschäftigt haben.

Sortiert nach:   neueste | älteste | beste Bewertung
Efren
Gast

Hallo, ich habe den Bericht über PHPImageWorkshop gelesen und war eigentlich sehr an dem Scribt interessiert.

Ich habe jedeoch nach Download von der Webseite diverse Beispiele ausprobiert und es werden mir sehr viele Fehler in dem Script selbst angezeigt.

Ebenfalls funktionieren Ihre in dem Bericht kurz aufgeführten Scripts nicht. Enttäuschend….

wpDiscuz