/**********************************************************************
//Crear texto curvados
//Ondulación del texto en los ejes X e Y
// Genero ondas verticales (eje X)
//Genero ondas horizontales (eje Y)
**********************************************************************/
$period = $scale*$periodoX;
$amplitude = $scale*$amplitudX;
for ($i = 0;$i < ($width*$scale);$i++) {
$i-1, sin($k+$i/$period) * $amplitude, $i,0,
1,$height*$scale);
}
$period = $scale*$periodoY;
$amplitude = $scale*$amplitudY;
for ($i = 0;$i < ($height*$scale);$i++) {
sin($k+$i/$period) * $amplitude, $i-1, 0,$i,
$width*$scale,1);
}
/**********************************************************************
//Texto desde un archivo .txt
**********************************************************************/
function getDictionaryCaptchaText($extended = true) {
$fp = fopen("words-es.txt", "r"); // Cambio vocales al azar
if ($extended) {
$vocals = array('a','e','i','o','u'); foreach ($text as $i => $char) {
}
}
}
return $text;
}
/**********************************************************************
//Alternación de color de textos
**********************************************************************/
array(27,78,181), // azul array(22,163,35), // verde );
/**********************************************************************
//Disminuir el espaciado entre caracteres
//Variación de tamaños de caracteres
**********************************************************************/
$text = getDictionaryCaptchaText($extended);
// Definiciones de latipografía a utilizar
// - font: archivo TTF
// - minSize: tamaño de fuente mínimo a utilizar
// - maxSize: tamaño de fuente máximo a utilizar
// - condensation: Cantidad de pixeles que se quitará entre cada caracter
$x = 20;
for ($i=0; $i<=6; $i++) {
$x, 47, $fg_color, 'fonts/'.$fontcfg['font'], substr($text, $i, 1)); $x += ($coords[2]-$x)-$fontcfg['condensation'];
}
/**********************************************************************
//genera textos aleatorios alternando consonantes y vocales al azar:
**********************************************************************/
function getCaptchaText() {
$consonants = "abcdefghijlmnopqrstvwyz";
$vocals = "aeiou";
$text = "";
for ($i=0; $i<$length; $i++) {
if ($vocal) {
} else {
}
$vocal = !$vocal;
}
return $text;
}
LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLy9DcmVhciB0ZXh0byBjdXJ2YWRvcwovL09uZHVsYWNpw7NuIGRlbCB0ZXh0byBlbiBsb3MgZWplcyBYIGUgWQovLyBHZW5lcm8gb25kYXMgdmVydGljYWxlcyAoZWplIFgpCi8vR2VuZXJvIG9uZGFzIGhvcml6b250YWxlcyAoZWplIFkpCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgokcGVyaW9kICAgID0gJHNjYWxlKiRwZXJpb2RvWDsKJGFtcGxpdHVkZSA9ICRzY2FsZSokYW1wbGl0dWRYOwokayAgICAgICAgID0gcmFuZCgwLDEwMCk7CmZvciAoJGkgPSAwOyRpIDwgKCR3aWR0aCokc2NhbGUpOyRpKyspIHsKIGltYWdlY29weSgkaW0sJGltLAogICAgICAgICAgICRpLTEsIHNpbigkayskaS8kcGVyaW9kKSAqICRhbXBsaXR1ZGUsCiAgICAgICAgICAgJGksMCwKICAgICAgICAgICAxLCRoZWlnaHQqJHNjYWxlKTsKfQoKJHBlcmlvZCAgICA9ICRzY2FsZSokcGVyaW9kb1k7CiRhbXBsaXR1ZGUgPSAkc2NhbGUqJGFtcGxpdHVkWTsKJGsgICAgICAgICA9IHJhbmQoMCwxMDApOwpmb3IgKCRpID0gMDskaSA8ICgkaGVpZ2h0KiRzY2FsZSk7JGkrKykgewogICBpbWFnZWNvcHkoJGltLCRpbSwKICAgICAgICAgICBzaW4oJGsrJGkvJHBlcmlvZCkgKiAkYW1wbGl0dWRlLCAkaS0xLAogICAgICAgICAgIDAsJGksCiAgICAgICAgICAkd2lkdGgqJHNjYWxlLDEpOwp9CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgovL1RleHRvIGRlc2RlIHVuIGFyY2hpdm8gLnR4dAoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKZnVuY3Rpb24gZ2V0RGljdGlvbmFyeUNhcHRjaGFUZXh0KCRleHRlbmRlZCA9IHRydWUpIHsKICAgJGZwID0gZm9wZW4oIndvcmRzLWVzLnR4dCIsICJyIik7CiAgICRsaW5lYSA9IHJhbmQoMCwgKGZpbGVzaXplKCJ3b3Jkcy1lcy50eHQiKS84KS0xKTsKICAgZnNlZWsoJGZwLCA4KiRsaW5lYSk7CiAgICR0ZXh0ID0gdHJpbShmZ2V0cygkZnApKTsKICAgZmNsb3NlKCRmcCk7CiAgIC8vIENhbWJpbyB2b2NhbGVzIGFsIGF6YXIKICAgaWYgKCRleHRlbmRlZCkgewogICAgICAgJHRleHQgPSBzdHJfc3BsaXQoJHRleHQsIDEpOwogICAgICAgJHZvY2FscyA9IGFycmF5KCdhJywnZScsJ2knLCdvJywndScpOwogICAgICAgZm9yZWFjaCAoJHRleHQgYXMgJGkgPT4gJGNoYXIpIHsKICAgICAgICAgICBpZiAobXRfcmFuZCgwLDEpICYmIGluX2FycmF5KCRjaGFyLCAkdm9jYWxzKSkgewogICAgICAgICAgICAgICAkdGV4dFskaV0gPSAkdm9jYWxzW210X3JhbmQoMCw0KV07CiAgICAgICAgICAgfQogICAgICAgfQogICAgICAgJHRleHQgPSBpbXBsb2RlKCcnLCAkdGV4dCk7CiAgIH0KICAgcmV0dXJuICR0ZXh0Owp9CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgovL0FsdGVybmFjacOzbiBkZSBjb2xvciBkZSB0ZXh0b3MKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCiRjb2xvcnMgPSBhcnJheSgKIGFycmF5KDI3LDc4LDE4MSksIC8vIGF6dWwKIGFycmF5KDIyLDE2MywzNSksIC8vIHZlcmRlCiBhcnJheSgyMTQsMzYsNyksICAvLyByb2pvCik7CgokY29sb3IgPSAkY29sb3JzW210X3JhbmQoMCwgc2l6ZW9mKCRjb2xvcnMpLTEpXTsKJGZnX2NvbG9yID0gaW1hZ2Vjb2xvcmFsbG9jYXRlKCRpbSwgJGNvbG9yWzBdLCAkY29sb3JbMV0sICRjb2xvclsyXSk7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgovL0Rpc21pbnVpciBlbCBlc3BhY2lhZG8gZW50cmUgY2FyYWN0ZXJlcwovL1ZhcmlhY2nDs24gZGUgdGFtYcOxb3MgZGUgY2FyYWN0ZXJlcwoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKJHRleHQgPSBnZXREaWN0aW9uYXJ5Q2FwdGNoYVRleHQoJGV4dGVuZGVkKTsKCi8vIERlZmluaWNpb25lcyBkZSBsYXRpcG9ncmFmw61hIGEgdXRpbGl6YXIKLy8gLSBmb250OiBhcmNoaXZvIFRURgovLyAtIG1pblNpemU6IHRhbWHDsW8gZGUgZnVlbnRlIG3DrW5pbW8gYSB1dGlsaXphcgovLyAtIG1heFNpemU6IHRhbWHDsW8gZGUgZnVlbnRlIG3DoXhpbW8gYSB1dGlsaXphcgovLyAtIGNvbmRlbnNhdGlvbjogQ2FudGlkYWQgZGUgcGl4ZWxlcyBxdWUgc2UgcXVpdGFyw6EgZW50cmUgY2FkYSBjYXJhY3RlcgokZm9udGNmZyA9ICRmb250c1ttdF9yYW5kKDAsIHNpemVvZigkZm9udHMpLTEpXTsKCiR4ID0gMjA7CmZvciAoJGk9MDsgJGk8PTY7ICRpKyspIHsKICAgJGNvb3JkcyA9IGltYWdldHRmdGV4dCgkaW0sIHJhbmQoJGZvbnRjZmdbJ21pblNpemUnXSwkZm9udGNmZ1snbWF4U2l6ZSddKSwgMCwKICAgICAgICAgICAkeCwgNDcsICRmZ19jb2xvciwgJ2ZvbnRzLycuJGZvbnRjZmdbJ2ZvbnQnXSwgc3Vic3RyKCR0ZXh0LCAkaSwgMSkpOwogICAkeCArPSAoJGNvb3Jkc1syXS0keCktJGZvbnRjZmdbJ2NvbmRlbnNhdGlvbiddOwp9CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgovL2dlbmVyYSB0ZXh0b3MgYWxlYXRvcmlvcyBhbHRlcm5hbmRvIGNvbnNvbmFudGVzIHkgdm9jYWxlcyBhbCBhemFyOgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKZnVuY3Rpb24gZ2V0Q2FwdGNoYVRleHQoKSB7CiRsZW5ndGggPSByYW5kKDUsNyk7CiRjb25zb25hbnRzID0gImFiY2RlZmdoaWpsbW5vcHFyc3R2d3l6IjsKJHZvY2FscyA9ICJhZWlvdSI7CiR0ZXh0ID0gIiI7CiR2b2NhbCA9IHJhbmQoMCwxKTsKZm9yICgkaT0wOyAkaTwkbGVuZ3RoOyAkaSsrKSB7CmlmICgkdm9jYWwpIHsKICAkdGV4dCAuPSBzdWJzdHIoJHZvY2FscywgbXRfcmFuZCgwLCA0KSwgMSk7Cn0gZWxzZSB7CiAgJHRleHQgLj0gc3Vic3RyKCRjb25zb25hbnRzLCBtdF9yYW5kKDAsIDIyKSwgMSk7Cn0KJHZvY2FsID0gISR2b2NhbDsKfQpyZXR1cm4gJHRleHQ7Cn0K
/**********************************************************************
//Crear texto curvados
//Ondulación del texto en los ejes X e Y
// Genero ondas verticales (eje X)
//Genero ondas horizontales (eje Y)
**********************************************************************/
$period = $scale*$periodoX;
$amplitude = $scale*$amplitudX;
$k = rand(0,100);
for ($i = 0;$i < ($width*$scale);$i++) {
imagecopy($im,$im,
$i-1, sin($k+$i/$period) * $amplitude,
$i,0,
1,$height*$scale);
}
$period = $scale*$periodoY;
$amplitude = $scale*$amplitudY;
$k = rand(0,100);
for ($i = 0;$i < ($height*$scale);$i++) {
imagecopy($im,$im,
sin($k+$i/$period) * $amplitude, $i-1,
0,$i,
$width*$scale,1);
}
/**********************************************************************
//Texto desde un archivo .txt
**********************************************************************/
function getDictionaryCaptchaText($extended = true) {
$fp = fopen("words-es.txt", "r");
$linea = rand(0, (filesize("words-es.txt")/8)-1);
fseek($fp, 8*$linea);
$text = trim(fgets($fp));
fclose($fp);
// Cambio vocales al azar
if ($extended) {
$text = str_split($text, 1);
$vocals = array('a','e','i','o','u');
foreach ($text as $i => $char) {
if (mt_rand(0,1) && in_array($char, $vocals)) {
$text[$i] = $vocals[mt_rand(0,4)];
}
}
$text = implode('', $text);
}
return $text;
}
/**********************************************************************
//Alternación de color de textos
**********************************************************************/
$colors = array(
array(27,78,181), // azul
array(22,163,35), // verde
array(214,36,7), // rojo
);
$color = $colors[mt_rand(0, sizeof($colors)-1)];
$fg_color = imagecolorallocate($im, $color[0], $color[1], $color[2]);
/**********************************************************************
//Disminuir el espaciado entre caracteres
//Variación de tamaños de caracteres
**********************************************************************/
$text = getDictionaryCaptchaText($extended);
// Definiciones de latipografía a utilizar
// - font: archivo TTF
// - minSize: tamaño de fuente mínimo a utilizar
// - maxSize: tamaño de fuente máximo a utilizar
// - condensation: Cantidad de pixeles que se quitará entre cada caracter
$fontcfg = $fonts[mt_rand(0, sizeof($fonts)-1)];
$x = 20;
for ($i=0; $i<=6; $i++) {
$coords = imagettftext($im, rand($fontcfg['minSize'],$fontcfg['maxSize']), 0,
$x, 47, $fg_color, 'fonts/'.$fontcfg['font'], substr($text, $i, 1));
$x += ($coords[2]-$x)-$fontcfg['condensation'];
}
/**********************************************************************
//genera textos aleatorios alternando consonantes y vocales al azar:
**********************************************************************/
function getCaptchaText() {
$length = rand(5,7);
$consonants = "abcdefghijlmnopqrstvwyz";
$vocals = "aeiou";
$text = "";
$vocal = rand(0,1);
for ($i=0; $i<$length; $i++) {
if ($vocal) {
$text .= substr($vocals, mt_rand(0, 4), 1);
} else {
$text .= substr($consonants, mt_rand(0, 22), 1);
}
$vocal = !$vocal;
}
return $text;
}