<?php
// SCRIPT GESCHREVEN DOOR STEVEN GROOTHUISMINK
// VOOR INFORMATIE NEEM CONTACT OP VIA TRAPPERDESIGN.COM
// BIJ GEBRUIK VAN DIT SCRIPT WORDT EEN LINK NAAR WWW.TRAPPERDESIGN.COM GEWAARDEERD

// Declaratie van de variable
$randomnr= "";


// Start de Session die nodig is om de Captcha code te gebruiken.
session_start();

// Lijst met alle letters en cijfers die gebruikt worden om de Captcha aan te maken. 
// Ik heb ervoor gekozen om een aantal letters en cijfers weg te laten aangezien deze veel op elkaar lijken (1, i).
$Characters = '23456789abcdefghjklmnpqrstuvwxyz'; 

// Aantal tekens dat gebruikt wordt om de Captcha aan te maken. 
// Ik heb het aantal ingesteld op 5
$chars = 5;

// Stel hieronder de afmetingen voor de Captcha afbeelding in.
// Ik heb gekozen voor 150 pixels breed bij 50 pixels hoog.
$Width = 150;
$Height = 50;

// Maak de Captcha code aan. De code hieronder kiest willekeurig het aantal tekens uit dat is vastgelegd.
// In het geval van dit voorbeeld worden er 5 willekeurige tekens gekozen uit de lijst $Characters
$i = 0;
while ($i < $chars) 
{ 
$randomnr .= substr($Characters, mt_rand(0, strlen($Characters)-1), 1);
$i++;
}

// Schrijf de aangemaakte Captcha code weg in een Session. 
// Ik versleutel de code met een md5 hash zodat de code niet zomaar uit de Session te lezen is.
$_SESSION['randomnr2'] = md5($randomnr);

// Start met het aanmaken van de afbeelding.
 $im = imagecreatetruecolor($Width, $Height);

// Bepaal de kleuren die je wilt gebruiken. Deze Captcha maakt gebruik van 3 kleuren. 
// Kleur 1: $front is de Captcha Code waar het uitenidelijk om draait. 255 255 255
// Kleur 2: $shadow is de schaduw die ik achter de Captcha Code schrijf. 128 128 255 
// Kleur 3: $background is de achtergrond kleur van de gehele Captcha afbeelding.6 51 125    125
$front = imagecolorallocate($im, 255, 255, 255); 
$shadow = imagecolorallocate($im, 128, 128, 255);
$background = imagecolorallocate($im, 6, 51,125);

// Vul de aangemaakt afbeelding met de hierboven ingestelde achtergrond kleur.
//imagefilledrectangle($im, 0, 0, $Width, $Height, $background);

// Stel het True Type Font in dat je wilt gaan gebruiken. 
// Zorg ervoor dat je de juiste locatie van je .ttf bestand invult. 
// Voor deze Captcha maak ik gebruik van Artbrush.ttf
$font = './ArtBrush.ttf';

// Stel de max. en min. hoek in waarmee je de Captcha weg wilt schrijven. Gebruik hiervoor een getal tussen de 0 en 15.
// Deze hoeken worden hierna willekeurig bepaalt aan de hand van de ingestelde max. en min. waarden.
// $angle1 is de hoek waarin de Schaduw van de Captcha code wordt weergegeven.
// $angle2 is de hoek waarin de Captcha code zelf wordt weergegeven.
$angle1 = rand(-12, 12);
$angle2 = rand(-12, 12);

// Schrijf de Schaduw van de Captcha op de afbeelding.
// Het eerste getal (hier 25) is de grootte van de tekens die weggeschreven worden.
// Het tweede getal (hier 20) is de afstand in pixels dat de tekens van de rechterkant af weggeschreven worden.
// Het derde getal (hier 28) is de afstand in pixels dat de tekens van de bovenkant af weggeschreven worden.
imagettftext($im, 25, $angle1, 20, 28, $shadow, $font, $randomnr);

// Schrijf de Captcha Code op de afbeelding.
// Het eerste getal (hier 20) is de grootte van de tekens die weggeschreven worden.
// Het tweede getal (hier 30) is de afstand in pixels dat de tekens van de rechterkant af weggeschreven worden.
// Het derde getal (hier 32) is de afstand in pixels dat de tekens van de bovenkant af weggeschreven worden.
imagettftext($im, 20, $angle2, 30, 32, $front, $font, $randomnr);

// Voorkom dat de afbeelding ge-cached wordt door headers te versturen.
header("Expires: Wed, 1 Jan 1997 00:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");

// Verzend de aangemaakte afbeelding naar de browser.
header ("Content-type: image/png");
imagegif($im);
imagedestroy($im);
?>