11. Afbeeldingen maken met GD

PHP bevat de grafische bibliotheek GD (graphics draw) waarmee dynamisch afbeeldingen gegenereerd kunnen worden.
Voor PHP onder Windows, controleer even dat in php.ini volgende optie actief is: extension=php_gd2.dll

11.1. De basis

Je maakt een afbeelding in een apart PHP-bestand en je begint met de creatie van de 'image': $img = imagecreatetruecolor(breedte, hoogte);
Deze instructie maakt een met zwart gevulde rechthoek van breedte x hoogte pixels.

Vervolgens maak je de kleuren die je wil gebruiken:
$kleurNaam = imagecolorallocate($img, r, g, b);

waarbij r, g en b waarden tussen 0 en 255 zijn voor rood, groen en blauw.

Eventueel kan je ook de lijndikte in pixels bepalen: imagesetthickness($img, 4);

Wil je een andere achtergrond dan zwart? Gebruik imagefill($img, 0, 0, $kleur);

Daarna zal je de vormen tekenen, zie 11.3.

Een voorbeeld vind je bij 8.7. Captcha en 10.3. Voorbeeld tekstbestand lezen met grafiek.

11.2. De afbeelding opslaan en oproepen

Je roept een afbeelding op in de HTML 'img' tag: <img src="bestand.ext" alt="afbeelding" >
waarbij de bestandsnaam en extensie afhangen van de manier waarop de afbeelding gemaakt werd:

Behalve een PNG kan je ook een GIF of een JPEG maken: imagegif($img, "bestand.gif"); of imagejpeg($img, "bestand.jpg", kwaliteit); waarbij kwaliteit een waarde tussen 0 (slechte kwaliteit, klein bestand) en 100 (beste kwaliteit, groot bestand) is. Standaard is de kwaliteit 75.

Als laatste commando in het afbeeldingsbestand moet je altijd het gebruikte geheugen terug vrijgeven: imagedestroy($img);

11.3. De tekenfuncties

Heb je de afbeelding gecreëerd en de kleuren gemaakt, dan kan je beginnen tekenen.
Hieronder enkele veelgebruikte vormen, op PHP.net vind je er meer.

imagesetpixel($img, x, y, $kleur);
tekent een gekleurd punt op positie (x, y) ten opzichte van de linkerbovenhoek van de afbeelding
imageline($img, x1, y1, x2, y2, $kleur);
tekent een lijn van (x1, y1) tot (x2, y2) in de opgegeven kleur
imagerectangle($img, x1, y1, x2, y2, $kleur);
tekent de gekleurde omtrek van een rechthoek met linker bovenhoek (x1, y1) en rechter benedenhoek (x2, y2)
imagefilledrectangle($img, x1, y1, x2, y2, $kleur);
tekent een gevulde rechthoek van linker bovenhoek (x1, y1) tot rechter benedenhoek (x2, y2)
imageellipse($img, x, y, breedte, hoogte, $kleur);
tekent de gekleurde omtrek van een ovaal met middelpunt (x, y) en de opgegeven breedte en hoogte
imagefilledellipse($img, x, y, breedte, hoogte, $kleur);
tekent een gevulde ovaal met middelpunt (x, y) en de opgegeven breedte en hoogte
imagestring($img, size, x, y, "tekst", $kleur);
tekent "tekst" in het basislettertype, met lettergrootte size = 1 tot 5, vanaf linker bovenhoek (x, y) in de opgegeven kleur.
imagestringup($img, size, x, y, "tekst", $kleur);
tekent verticale tekst in het basislettertype, met lettergrootte size = 1 tot 5, vanaf linker benedenhoek (x, y) in de opgegeven kleur
imagettftext($img, size, hoek, x, y, $kleur, "font.ttf", "tekst");"
tekent "tekst" in lettertype "font.ttf", met lettergrootte size in pixels, met hoek (0 - 360) gedraaid, linker benedenhoek (x, y) en in de opgegeven kleur.
Best zet je het lettertypebestand op de server, zodat de functie het zeker kan vinden.