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. Der
ImageManager muss vor der Verwendung per
PHP-Code
import('tools::image','ImageManager');
eingebunden werden. Für das Handling von Bildern stehen die beiden statischen Methoden
- showImageAttributes() und
- resizeImage()
zur Verfügung. Die bis zum Release 1.8 verfügbaren Methoden können in der
alten Dokumentation
nachgelesen werden.
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
import('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
import('tools::image','ImageManager');
$image = './images/my_new_dog.png';
echo ImageManager::getImageAttributes($image,'type');
erzeugt demnach die Ausgabe
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)
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
import('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
import('tools::image','ImageManager');
$image = './images/my_old_dog.jpg';
ImageManager::resizeImage($image,$width,$height,null,90);
bewerkstelligt werden.
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
// include the necessary libraries
import('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('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.