Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Alguien me explica como usar este codigo

Estas en el tema de Alguien me explica como usar este codigo en el foro de PHP en Foros del Web. Baje es te codigo de captcha facil. es un captcha en PHP con una imagen gris de fondo y letras y numeros en gris oscuro. ...
  #1 (permalink)  
Antiguo 31/05/2014, 16:18
Avatar de thepiratebyte  
Fecha de Ingreso: mayo-2014
Mensajes: 13
Antigüedad: 9 años, 11 meses
Puntos: 0
Pregunta Alguien me explica como usar este codigo

Baje es te codigo de captcha facil. es un captcha en PHP con una imagen gris de fondo y letras y numeros en gris oscuro.

Lo que quiero es que las letras y numeros sean de colores y el fondo distinto para que no sea tan opaco y mas variado.
nose si se puede lograr con estos codigos. creo que son los rand. pero no entiendo mucho. solo quiero cambiar las letras de color. que aparescan una de cada color

Código PHP:

<?php 

    
    
#create image and set background color
    
$captcha imagecreatetruecolor(120,35);
    
$color rand(128,160);
    
$background_color imagecolorallocate($captcha$color$color$color);
    
imagefill($captcha00$background_color);
    
    
#draw some lines
    
for($i=0;$i<10;$i++){
        
$color rand(48,96);
        
imageline($captcharand(0,130),rand(0,35), rand(0,130), rand(0,35),imagecolorallocate($captcha$color$color$color));
    }
    
    
#generate a random string of 5 characters
    
$string substr(md5(rand()*time()),0,5);

    
#make string uppercase and replace "O" and "0" to avoid mistakes
    
$string strtoupper($string);
    
$string str_replace("O","B"$string);
    
$string str_replace("0","C"$string);

    
#save string in session "captcha" key
    
session_start();
    
$_SESSION["captcha"]=$string;

    
#place each character in a random position
    
putenv('GDFONTPATH=' realpath('.'));
    
$font 'arial.ttf';
    for(
$i=0;$i<5;$i++){
        
$color rand(0,32);
        if(
file_exists($font)){
            
$x=4+$i*23+rand(0,6);
            
$y=rand(18,28);
            
imagettftext  ($captcha15rand(-25,25), $x$yimagecolorallocate($captcha$color$color$color), $font$string[$i]);
        }else{
            
$x=5+$i*24+rand(0,6);
            
$y=rand(1,18);
            
imagestring($captcha5$x$y$string[$i], imagecolorallocate($captcha$color$color$color));
        }
    }
    
    
#applies distorsion to image
    
$matrix = array(array(111), array(1.071.0), array(111));
    
imageconvolution($captcha$matrix1632);

    
#avoids catching
    
header("Expires: 0");
    
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
    
header("Cache-Control: private",false); 

    
#return the image
    
header("Content-type: image/gif");
    
imagejpeg($captcha);
?>

Última edición por thepiratebyte; 31/05/2014 a las 16:22 Razón: titulo confuso
  #2 (permalink)  
Antiguo 31/05/2014, 16:25
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Respuesta: Alguien me explica como usar este codigo

Recibe string correspondiente a un captcha como variable de session: $_SESSION["captcha"], lo genera y lo muestra.

Logicamente se genera ese string y se guarda en $_SESSION["captcha"], luego hay una redireccion o el visitante sigue un enlace, etc y llega a una pagina captcha.php por ponerle un nombre con este script que creeria es cargado dentro de un iframe ya que el script termina sin validacion del captcha.


Una variacion seria guardar la imagen generada como variable de session (te tocaria quitar esos headers y capturar buffers) tambien junto con el tiempo de generacion (timestamp) y posiblemente la URI asociada y asi establecer que ese captcha puede usuarse por un tiempo antes de expirar.


Estudia SESSSIONs en PHP

PD: el tema de las cabeceras no lo tengo tan claro... pero aca hay mucha informacion
__________________
Salu2!

Última edición por Italico76; 31/05/2014 a las 16:45
  #3 (permalink)  
Antiguo 31/05/2014, 16:48
Avatar de thepiratebyte  
Fecha de Ingreso: mayo-2014
Mensajes: 13
Antigüedad: 9 años, 11 meses
Puntos: 0
Respuesta: Alguien me explica como usar este codigo

Cita:
Iniciado por Italico76 Ver Mensaje
Recibe string correspondiente a un captcha como variable de session: $_SESSION["captcha"], lo genera y lo muestra.

Logicamente se genera ese string y se guarda en $_SESSION["captcha"], luego hay una redireccion o el visitante sigue un enlace, etc y llega a una pagina captcha.php por ponerle un nombre con este script que creeria es cargado dentro de un iframe ya que el script termina sin validacion del captcha.


Una variacion seria guardar la imagen generada como variable de session (te tocaria quitar esos headers y capturar buffers) tambien junto con el tiempo de generacion (timestamp) y posiblemente la URI asociada y asi establecer que ese captcha puede usuarse por un tiempo antes de expirar.


Estudia SESSSIONs en PHP

PD: el tema de las cabeceras no lo tengo tan claro... pero [URL="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html"]aca hay mucha informacion[/URL]
El codigo lo estoy usando . nesesito cambiar el color nadmas de las letras y numeros,
  #4 (permalink)  
Antiguo 31/05/2014, 17:15
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Respuesta: Alguien me explica como usar este codigo

Que pena leer tan mal!

Los colores estan codificados en RGB (red-green-blue) asi que cada vez que ves: $color1, $color2, $color3 estas viendo la cantidad de rojo, verde y azul y que como te explico mejor al final son el la practica esos grises horribles.

Ten en cuenta que el bajo contraste tiene que ver con hacer mas dificil la decodificacion via algortimos de reconocimiento de caracteres, pero bueno aca un cambio ... luego si tengo tiempo lo mejoro haciendo puedas cojer entre varios colores pre-seleccionados de un array con array_rand() ..bla bla bla

Código PHP:
Ver original
  1. <?php  
  2.  
  3.      
  4.     #create image and set background color
  5.    $captcha = imagecreatetruecolor(120,35);
  6.     $background_color = imagecolorallocate($captcha, 0xff, 0xff, 0xff); //fffff = 255
  7.     imagefill($captcha, 0, 0, $background_color);
  8.      
  9.     #draw some lines
  10.    for($i=0;$i<10;$i++){
  11.         imageline($captcha, rand(0,130),rand(0,35), rand(0,130), rand(0,35),imagecolorallocate($captcha, 0x33, 0xff, 0x00)); //33ff00 = es un verde claro
  12.     }
  13.      
  14.     #generate a random string of 5 characters
  15.    $string = substr(md5(rand()*time()),0,5);
  16.  
  17.     #make string uppercase and replace "O" and "0" to avoid mistakes
  18.    $string = strtoupper($string);
  19.     $string = str_replace("O","B", $string);
  20.     $string = str_replace("0","C", $string);
  21.  
  22.     #save string in session "captcha" key
  23.    session_start();
  24.     $_SESSION["captcha"]=$string;
  25.    
  26.  
  27.     #place each character in a random position
  28.    putenv('GDFONTPATH=' . realpath('.'));
  29.     $font = 'arial.ttf';
  30.     for($i=0;$i<5;$i++){        
  31.         if(file_exists($font)){
  32.             $x=4+$i*23+rand(0,6);
  33.             $y=rand(18,28);
  34.             imagettftext  ($captcha, 15, rand(-25,25), $x, $y, imagecolorallocate($captcha, 0x00, 0x33, 0x66), $font, $string[$i]);
  35.         }else{
  36.             $x=5+$i*24+rand(0,6);
  37.             $y=rand(1,18);
  38.             imagestring($captcha, 5, $x, $y, $string[$i], imagecolorallocate($captcha, 0x00, 0x33, 0x66));
  39.         }
  40.     }
  41.      
  42.     #applies distorsion to image
  43.    $matrix = array(array(1, 1, 1), array(1.0, 7, 1.0), array(1, 1, 1));
  44.     imageconvolution($captcha, $matrix, 16, 32);
  45.  
  46.     #avoids catching
  47.    header("Expires: 0");
  48.     header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
  49.     header("Cache-Control: private",false);  
  50.  
  51.     #return the image
  52.    header("Content-type: image/gif");
  53.     imagejpeg($captcha);
  54. ?>

Basicamente elimine esos $color, $color, $color que te daban siempre grises (porque R == G == B son grises) y le puse unos que me gustaron que coji de esta tabla RGB


PD: el post anterior mio.... denota estaba en las nubes...... jejeje
__________________
Salu2!

Última edición por Italico76; 31/05/2014 a las 17:35
  #5 (permalink)  
Antiguo 31/05/2014, 20:35
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Respuesta: Alguien me explica como usar este codigo

El programa ya no funciona con las ultimas versiones de PHP...... lastima
__________________
Salu2!

Última edición por Italico76; 03/05/2016 a las 18:00

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 04:14.