crear una llamada de archivo Captcha.class.php
y poner esto:
class Captcha {
private $font = '/path/to/font/yourfont.ttf'; // get any font you like and dont forget to update this.
private function generateCode($characters) {
$possible = '23456789bcdfghjkmnpqrstvwxyz'; // why not 1 and i, because they look similar and its hard to read sometimes
$code = '';
$i = 0;
while ($i < $characters) {
$code .= substr($possible, mt_rand(0, strlen($possible)-1), 1);
$i++;
}
return $code;
}
function getImage($width, $height, $characters) {
$code = $this->generateCode($characters);
$fontSize = $height * 0.75;
$image = imagecreate($width, $height);
if(!$image) {
return FALSE;
}
$background_color = imagecolorallocate($image, 255, 255, 255);
$text_color = imagecolorallocate($image, 66, 42, 32);
$noiseColor = imagecolorallocate($image, 150, 150, 150);
for($i=0; $i<($width*$height)/3; $i++) {
imagefilledellipse($image, mt_rand(0,$width), mt_rand(0,$height), 1, 1, $noiseColor);
}
for($i=0; $i<($width*$height)/150; $i++) {
imageline($image, mt_rand(0,$width), mt_rand(0,$height), mt_rand(0,$width), mt_rand(0,$height), $noiseColor);
}
$textbox = imagettfbbox($fontSize, 0, $this->font, $code);
if(!$textbox) {
return FALSE;
}
$x = ($width - $textbox[4])/2;
$y = ($height - $textbox[5])/2;
imagettftext($image, $fontSize, 0, $x, $y, $text_color, $this->font , $code) or die('Error in imagettftext function');
header('Content-Type: image/jpeg');
imagejpeg($image);
imagedestroy($image);
$_SESSION['captcha'] = $code;
}
}
Luego, en la página que puede hacer:
<img src="/captcha.php" />
Luego, en el /captcha.php
va a poner:
session_start();
require('Captcha.class.php');
$Captcha = new Captcha();
$Captcha->getImage(120,40,6);
Puede cambiar los parámetros a medida que deseo mostrar un captcha diferente también
De esta forma generará sobre la marcha. Siempre puede guardar la imagen en el disco si así lo desea.
¿por qué no usas gd? –
Si tiene en total más de 5000 contactos o boletines, es bastante popular :) Esto parece bastante ineficiente y un desperdicio de recursos. Generar imagen solo cuando sea necesario. – Bakudan
bien, genero 5000 para asegurarme de que cuando realizo la asignación al azar, no obtengo el mismo resultado dos veces. – Owan