ImageManager

Der ImageManager implementiert Methoden zur Bearbeitung von Bildern. Hierbei werden sowohl JPG und GIF als auch PNG-Bilder unterstützt, sofern die PHP-GD-Library in den entsprechenden Version verfügbar ist.

Für das Handling von Bildern stehen die beiden statischen Methoden

  • showImageAttributes() und
  • resizeImage()

zur Verfügung.

1. Anzeigen von Bild-Attributen

Mit der Methode showImageAttributes() können die Attribute eines Bildes ausgelesen werden. Die Methode gibt entweder ein assoziatives Array von Attributen oder den Wert des gewünschten Attributes zurück. So kann mit dem Code

PHP-Code
use APF\tools\image\ImageManager; $image = './images/my_new_dog.png'; echo printObject(ImageManager::getImageAttributes($image));

die Ausgabe

Code
Array ( [width] => 180 [height] => 104 [type] => png [mimetype] => image/png [bitdepth] => 8 )

erzeugt werden. Wird als zweiter Parameter der Name des gewünschten Attributes übergeben, so entspricht die Rückgabe der Methode dem Wert des Attributes. Der Code

PHP-Code
use APF\tools\image\ImageManager; $image = './images/my_new_dog.png'; echo ImageManager::getImageAttributes($image,'type');

erzeugt demnach die Ausgabe

Code
png

Im Folgenden ist die Liste der Attribute dargestellt:

  • width: Breite des Bildes
  • height: Höhe des Bildes
  • type: Typ des Bildes (Endung)
  • mimetype: Mime-Typ des Bildes
  • bitdepth: Bittiefe des Bildes
  • colormode: Der Farb-Code des Bildes (RGB or CMYK)

2. Änderung der Bildgröße

Zur Änderung der Größe eines Bildes kann die Methode resizeImage() eingesetzt werden. Hierzu müssen das Quellbild und die Zielmaße gegeben sein. Wird kein Pfad für das geänderte Bild übergeben oder enthält der Parameter null, so wird die Ausgabe direkt nach STDOUT vorgenommen. Als optionaler Parameter kann noch die Qualität bei der Verarbeitung von JPEG-Bildern angegeben werden. Das folgenden Code-Snippet zeigt den Einsatz des ImageManagers bei der Generierung von Pictogrammen:

PHP-Code
use APF\tools\image\ImageManager; $image = './images/my_new_dog.png'; $picto = './images/my_new_dog_small.png'; $attributes = ImageManager::getImageAttributes($image); $width = round((int)$attributes['width'] / 10,0); // resize to 10% $height = round((int)$attributes['height'] / 10,0); // resize to 10% ImageManager::resizeImage($image,$width,$height,$picto);

Soll ein JPEG mit der Qualität 90 nach dem Resizen direkt ausgegeben werden, so kann dies mit

PHP-Code
use APF\tools\image\ImageManager; $image = './images/my_old_dog.jpg'; ImageManager::resizeImage($image,$width,$height,null,90);

bewerkstelligt werden.

3. Anwendungsfall ImageResizer

Ein typischer Anwendungsfall für den ImageManager ist das Ausliefern von Bildern mit dynamischer Größe über eine Front-Controller-Action. Der folgende Code-Block zeigt dabei den Inhalt der run()-Methode der Action, der zusätzlich bereits ausgelieferte Bilder aus dem Cache bezieht:

PHP-Code
use APF\tools\image\ImageManager; // gather the relevant params from the action input $image = urldecode($this->input->getAttribute('image')); $ext = $this->input->getAttribute('ext'); $size = (int)$this->input->getAttribute('size'); $path = $this->input->getAttribute('path'); // check, if all attributes are there $imagePath = $path.'/'.$image.'.'.$ext; if($image == null){ trigger_error('[ShowImageAction::run()] No image name ("image") given in frontcontroller input params!',E_USER_ERROR); exit(1); } if($ext == null){ trigger_error('[ShowImageAction::run()] No image extenstion information ("ext") given in frontcontroller input params!',E_USER_ERROR); exit(1); } if(!file_exists($imagePath)){ trigger_error('[ShowImageAction::run()] The image "'.$imagePath.'" does not exist. Please check your action call concerning the path, the name and the extention of the image!'); exit(1); } // gather the image attributes $attributes = ImageManager::getImageAttributes($imagePath); // resize image if($size === 100){ $imageSource = file_get_contents($imagePath); } else{ // calculate the new width and height $width = round(($size / 100) * intval($attributes['width']),0); $height = round(($size / 100) * intval($attributes['height']),0); // get cache manager $cMF = &$this->getServiceObject('APF\tools\cache\CacheManagerFabric'); $cM = &$cMF->getCacheManager('imageresizer'); // try to load the file from cache $cacheKey = md5($imagePath.$size); $imageSource = $cM->getFromCache($cacheKey); if($imageSource === null){ // resize image and catch the output ob_start(); ImageManager::resizeImage($imagePath,$width,$height); $imageSource = ob_get_contents(); ob_end_clean(); // write to cache $cM->writeToCache($cacheKey,$imageSource); } } // send header header('Content-Type: '.$attributes['mimetype']); header('Content-disposition: inline; filename="'.$image.'.'.$ext.'"'); header('Content-Transfer-Encoding: binary'); header('Content-Length: '.strlen($imageSource)); // stream image and exit echo $imageSource; exit(0);

Kommentare

Möchten Sie den Artikel eine Anmerkung hinzufügen, oder haben Sie ergänzende Hinweise? Dann können Sie diese hier einfügen. Die bereits verfassten Anmerkungen und Kommentare finden Sie in der untenstehenden Liste.
Für diesen Artikel liegen aktuell keine Kommentare vor.