
Bij webontwikkeling moet je vaak iets met afbeeldingen doen: avatars, banners, thumbnails of welke andere afbeelding je site ook moet tonen. PHP heeft daarvoor meerdere libraries aan boord, in de eerste plaats GD en Imagick. Dit artikel laat de belangrijkste mogelijkheden van beide zien, met codevoorbeelden die je zo in je eigen PHP-applicatie kunt gebruiken.
De library GD gebruiken in PHP
GD is een PHP-library om afbeeldingen te bewerken. Hij zit standaard in de meeste PHP-installaties, wat hem meteen bruikbaar maakt. GD ondersteunt de volgende formaten: JPG, PNG, GIF, BMP en WBMP.
Een afbeelding laden en tonen met GD
Om een afbeelding met GD te laden gebruik je de functie imagecreatefrom*() die bij het type afbeelding hoort (jpg, png, gif enzovoort). Die geeft een GD-resource terug die de in het geheugen geladen afbeelding voorstelt. Daarna stuur je de afbeelding naar de browser met header en de image*()-functie van het bijbehorende formaat (imagejpeg, imagepng, imagegif en de rest).
<?php
// De afbeelding in een GD-resource laden
$image = imagecreatefromjpeg('image.jpg');
// De afbeelding tonen
header('Content-Type: image/jpeg');
imagejpeg($image);Een afbeelding schalen met GD
Om een afbeelding met GD te schalen gebruik je de functie imagecopyresampled. Die kopieert een GD-afbeelding naar de afmetingen die je opgeeft en interpoleert daarbij, zodat de geschaalde afbeelding er goed uit blijft zien.
<?php
// De afbeelding in een GD-resource laden
$image = imagecreatefromjpeg('image.jpg');
// De afbeelding schalen
$image_resized = imagecreatetruecolor(200, 200);
imagecopyresampled($image_resized, $image, 0, 0, 0, 0, 200, 200, imagesx($image), imagesy($image));
// De geschaalde afbeelding tonen
header('Content-Type: image/jpeg');
imagejpeg($image_resized);Tekst op een afbeelding zetten met GD
Om tekst op een afbeelding te zetten met GD gebruik je de functie imagettftext. Die tekent tekst op een GD-afbeelding, met het lettertype, de grootte, de hoek en de kleur die je meegeeft.
<?php
// De afbeelding in een GD-resource laden
$image = imagecreatefromjpeg('image.jpg');
// Tekst op de afbeelding zetten
$text_color = imagecolorallocate($image, 0, 0, 0);
imagettftext($image, 20, 0, 10, 30, $text_color, 'arial.ttf', 'Hello World !');
// De afbeelding tonen
header('Content-Type: image/jpeg');
imagejpeg($image);De library Imagick gebruiken
Imagick is een andere PHP-library voor het verwerken van afbeeldingen. Hij gaat verder dan GD, met lagen en maskers, formaatconversie, randdetectie en ruisonderdrukking. Imagick ondersteunt heel veel formaten, vectorformaten zoals SVG inbegrepen.
Voordat je Imagick gebruikt, controleer je of de PHP-extensie imagick op je server is geïnstalleerd en ingeschakeld. Dat doe je met het volgende commando:
php -m | grep imagickStaat Imagick in de lijst met geladen extensies, dan kun je de klassen en methodes van de library in je PHP-code gebruiken. Zo niet, dan moet je de extensie Imagick eerst op je server installeren en inschakelen.
Een afbeelding laden en tonen met Imagick
Om een afbeelding met Imagick te laden maak je een object van de klasse Imagick aan met het pad naar de afbeelding. Dat object stelt de in het geheugen geladen afbeelding voor, en via de methodes ervan bewerk je haar. Om de afbeelding te tonen doe je gewoon echo op het Imagick-object.
<?php
// De afbeelding in een Imagick-object laden
$imagick = new Imagick('image.jpg');
// De afbeelding tonen
header('Content-Type: image/jpeg');
echo $imagick;Een afbeelding schalen met Imagick
Om een afbeelding met Imagick te schalen gebruik je de methode resizeImage van het Imagick-object. Die schaalt de afbeelding naar de afmetingen die je opgeeft, met een resampling-filter om de kwaliteit van het resultaat op peil te houden. Imagick biedt meerdere resamplingfilters, zoals FILTER_LANCZOS, FILTER_BOX of FILTER_CUBIC.
<?php
// De afbeelding in een Imagick-object laden
$imagick = new Imagick('image.jpg');
// De afbeelding schalen
$imagick->resizeImage(200, 200, Imagick::FILTER_LANCZOS, 1);
// De geschaalde afbeelding tonen
header('Content-Type: image/jpeg');
echo $imagick;Tekst op een afbeelding zetten met Imagick
Om tekst op een afbeelding te zetten met Imagick gebruik je de methode annotateImage van het Imagick-object. Die tekent tekst op de afbeelding, met het lettertype, de grootte, de hoek en de kleur die je meegeeft.
<?php
// De afbeelding in een Imagick-object laden
$imagick = new Imagick('image.jpg');
// Tekst op de afbeelding zetten
$draw = new ImagickDraw();
$draw->setFont('arial.ttf');
$draw->setFontSize(20);
$draw->setFillColor('black');
$imagick->annotateImage($draw, 10, 30, 0, 'Hello World !');
// De afbeelding tonen
header('Content-Type: image/jpeg');
echo $imagick;
Conclusie
Dit artikel heeft de belangrijkste mogelijkheden van de libraries GD en Imagick voor het verwerken van afbeeldingen in PHP behandeld: een afbeelding laden en tonen, haar schalen en er tekst op zetten. Met deze code kun je die functies in je eigen PHP-applicatie inbouwen. Beide libraries hebben nog een flinke reeks andere methodes en opties die het bekijken waard zijn als je verder wilt met beeldverwerking in PHP.


