Dynamische afbeeldingen met PHP
Development PHP

Dynamische afbeeldingen met PHP

PHP maakt het erg makkelijk om dingen te genereren. Een van die dingen is een afbeelding. Dit kan handig zijn omdat we bijvoorbeeld een dynamisch logo of een CAPTCHA afbeelding willen maken. Een ander voorbeeld is dat we bepaalde data willen tonen, zoals bijvoorbeeld het weer met een leuk icoontje van het weer type. In deze blogpost ga ik in op de basis van het maken van afbeeldingen met PHP.

Als eerste moeten we de correcte headers meegeven zodat de browser weet dat het om een afbeelding gaat. Dit doen we simpelweg met de header functie.

header('content-type: image/png');

Vervolgens met de imagecreate methode kunnen we beginnen met het maken van de afbeelding. De meegegeven parameters zijn de breedte en de hoogte (in pixels) van de afbeelding die we gaan maken. Voor dit voorbeeld maken we een afbeelding van 200px breed en 50px hoog. Houd er rekening mee dat hoe groter de afbeelding is hoe meer geheugen het kost om de afbeelding uiteindelijk te renderen.

$image = imagecreate(200, 50);

Nu we het afbeelding object hebben kunnen we de achtergrond kleur bepalen. Voor dit voorbeeld gebruiken we een witte achtergrond. Door de methode ImageColorAllocate aan te roepen kunnen we dit doen. Als eerste moeten we het afbeelding object mee geven. Hierna komen de RGB waardes.

ImageColorAllocate($image, 255, 255, 255);

Natuurlijk willen we niet alleen dynamisch een achtergrond kleur. We kunnen bijvoorbeeld ook tekst toevoegen. Dit kan door gebruik te maken van de imagettftext functie. Deze methode heeft behoorlijk wat parameters. Als eerste moet het afbeelding object worden meegegeven. Vervolgens de grootte van de tekst. Voor dit voorbeeld gebruik ik 22. Na de tekst grootte de hoek waarin de tekst geplaatst wordt. Hierna wordt de X en Y positie aangegeven (in pixels). Vervolgens geven we de kleur aan. Hiervoor gebruiken we dezelfde ImageColorAllocate functie die hierboven ook al beschreven staat. Na de tekstkleur komt het font inclusief het pad. Voor dit voorbeeld heb ik een font gedownload en font.ttf genoemd. Als laatste komt de uiteindelijke tekst.

imagettftext(
    $image,
    22,
    0,
    20,
    34,
    ImageColorAllocate($image, 0,0,0),
    'font.ttf',
    "This is my image"
);

Nadat dit is gedaan kunnen we de afbeelding tonen. Dit kan simpelweg met imagepng. Het enige wat we hieraan mee moeten geven is het afbeelding object. Hiermee wordt de afbeelding gerendered. Optioneel kun je hier ook nog een pad aan mee geven waarnaar de afbeelding naar kan worden weggeschreven. Voor dit voorbeeld doen we dat niet en willen we de afbeelding gewoon in de browser renderen. Vervolgens roepen we imagedestroy aan om al het geheugen wat wordt gebruikt voor de afbeelding weer vrij te geven.

imagepng($image);

imagedestroy($image);

Dit is alles wat nodig is om een simpele afbeelding te maken met PHP. Als we alles samenvoegen ziet het er zo uit:

<?php
header('content-type: image/png');

$image = imagecreate(200, 50);

ImageColorAllocate($image, 255, 255, 255);

imagettftext(
    $image,
    22,
    0,
    20,
    34,
    ImageColorAllocate($image, 0,0,0),
    'font.ttf',
    "This is my image"
);

imagepng($image);

imagedestroy($image);