Image-Klasse

Weil in PHP die Bildbearbeitung mit der GD Library doch etwas unbequem ist, wenn man bei jedem Thumbnail die Funktionen und Argumente wieder im PHP Manual nachlesen muss, habe ich die Image-Klasse programmiert, mit der sich Bilder komfortabel bearbeiten lassen. Der Programmiercode kann auf GitHub gefunden werden.

Die Klasse kann im Moment vor allem Thumbnails erstellen und Bilder drehen. Eine neue Instanz kann mit new Image($filename) erstellt werden, wobei das erste Argument der Pfad zur Bilddatei ist. Die Klasse kann mit JPEGs PNGs und GIFs umgehen. Es kann natürlich auch direkt eine PHP Variable von einem File upload mitgegeben werden.

$img = new Image('IMG0001.jpg');
$img = new Image($_FILES['file']['tmp_name']);

Wenn alle Bildmanipulationen getan wurden und das Bild gespeichert oder ausgegeben wurde, sollte aus jeden Fall immer das Image-Objekt gelöscht werden mit unset($img); oder $img = null;. Ansonsten bleibt die Variable belegt und ein PHP-Script erreicht so sehr schnell das Memory Limit (z.B. bei anderen Image-Funktionen).

Die zwei wichtigsten Resize-Funktionen dieser Klasse sind resizeLongEdge() und resizeFill(). resizeLongEdge($px) verändert die Bildgrösse so, dass das originale Seitenverhältnis beibehalten wird und dabei die längere Kante des Bildes auf den im ersten Argumente mitgegebenen Pixelwert verändert wird. resizeFill($width, $height) verändert die Grösse eines Bildes so, dass das Bild automatisch die komplette Breite und Höhe (als Argument mitgegeben) ausfüllt und dabei das originale Seitenverhältnis beibehalten wird. Es kann bei dieser Methode also vorkommen, dass ein Bild abgeschnitten wird. Diese Methode ist vorallem nützlich um z.B. quadratische Thumbnails von einem Bild zu erstellen.

Mit den save…()– und output…()-Methoden (saveJPG(), savePNG() und saveGIF(); outputJPG(), outputPNG() und outputGIF()) können die bearbeiteten Bilder gespeichert oder direkt im Browser ausgegeben werden. Als Argumente können der zu speichernde Dateiname und die Bildqualität angegeben werden.

$img = new Image($filename);
$img->resizeLongEdge(1280);
$img->saveJPG('new-image,jpg', 85);
unset($img);
$img = new Image($_FILES['file']['tmp_name']);
$img->resizeFill(500, 500);
$img->outputJPG(85);
unset($img);

Mit den Methoden rotate($angle), rotateClockwise() und rotateCounterClockwise() können Bilder gedreht werden. Mit und gegen den Uhrzeigersinn oder um einen bestimmten Winkel.

Mit der statischen Methode init($filename) können Bilder schnell in einer einzigen Zeile bearbeiten werden. Z.B.:

$img = Image::init($filename)->resizeFill(300, 300)->saveJPG('thumb.jpg', 75)->loadImage()->resizeLongEdge(1280)->saveJPG('img.jpg', 85);
unset($img);

Ausserdem kann mit der Methode getData() eine bestimmte Information über das Bild geholt werden. Z.B. mit $img->getData('width); die originale Breite des Ursprungsfotos. Bei JPGs ist auch der Zugriff auf Exif-Daten möglich. Z.B.: $copyright = $img->getData('exif', 'COMPUTED', 'Copyright');.

Über statische Klassen-Variablen können einige Einstellungen gemacht werden. Die Image-Klasse ist zum Beispiel so eingestellt, dass Bilder nie vergrössert werden können und sie grösstmöglich gespeichert werden. Diese und andere Einstellungen können deaktiviert werden.

require_once 'Image.php';
Image::$shrinkOnly = false;
Image::$throwExceptions = false;
Image::$chmod = 0777;

Detailliertere Informationen über diese Klasse können auf GitHub in der README.md Datei nachgelesen werden.

1 Kommentar zu „Image-Klasse“

  1. Pingback: Wolf CMS Galerie Plugin | Wolfgang Dreschers Blog

Kommentar verfassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert