enfin...
Vuelvo a tener un problema con mi reconocedor de captcha, tengo X captchas guardados en mi pc para hacer tests.
Esos captchas son reconocidos a la perfección, los caracteres se limpian y separan bien...
el tema está que, ahora le e implementado la creación del captcha al momento:
Código:
como veis la guarda como hackme.png y la recupero en la siguiente sentencia:$x = imagecreatefrompng("captcha.PNG"); $numeros = rand(0000,9999); $letras = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; $final = $letras{rand(1,50)}; $final .= $letras{rand(1,50)}; $final .= $letras{rand(1,50)}; $rand = $numeros.$final; $rand2 = $rand[3].$rand[5].$rand[1].$rand[6].$rand[2].$rand[7].$rand[3]; $color = imagecolorallocate($x,"250","0","0"); $string = imagestring($x,5,"13","7","$rand2",$color); $color1 = imagecolorallocate($x,"250","250","0"); $color2 = imagecolorallocate($x,"0","250","0"); $color3 = imagecolorallocate($x,"0","0","250"); $linea = imageline($x,"0","20","100","10",$color3); $linea = imageline($x,"0","10","20","100",$color1); $linea = imageline($x,"50","0","100","100",$color2); imagepng($x, "hackme.png");
Código:
la mando a limpiar:$im = imagecreatefrompng("hackme.png"); $img = Limpiar($im);
Código:
y me devuelve una imagen completamente en negro... (el negro significa que no hay nada el blanco es texto).function Limpiar($imagen) { //Tomamos alto y ancho $w = imagesx($imagen); $h = imagesy($imagen); //Creamos una nueva imagen para trabajar en ella $newimg = imagecreate($w,$h); $f= ''; //Recorremos cada pixel for ($x = 0; $x < $w; $x++) { for ($y = 0; $y < $h; $y++) { //asignamos los valores numéricos a los canales RGB $rgb = imagecolorat($imagen, $x, $y); $r = ($rgb >> 16) & 255; $g = ($rgb >> 8) & 255; $b = $rgb & 255; var_dump($rgb, $r, $g, $b); echo "<br />"; if ($r > 220 && $g < 200 && $b < 200) { $f = imagecolorresolve($newimg, 255, 255, 255); imagesetpixel($newimg, $x, $y, $f); //Pintamos negro si es una letra roja } else { $f = imagecolorresolve($newimg, 0, 0, 0); imagesetpixel($newimg, $x, $y, $f); //Sino pintamos blanco } } } //End for return $newimg; }
Pero, lo raro es eso.. porque una imagen igual preo preguardada en mi pc la reconoce bien...
entonces.... meto un sleep para que a mi pc le de tiempo de guardar la imagen creada, sigue negra.
en vez de guaradr y recuperar, lo que hago es usar la imagen creada en la variable, nada
y bue.. para acabar dumpeo los valores del $rgb, $r, $g, $b
de la imagen aleatoria: (solo algunos xD)
Cita:
de la imagen preguardada:int(16) int(0) int(0) int(16)
int(16) int(0) int(0) int(16)
int(16) int(0) int(0) int(16)
int(16) int(0) int(0) int(16)
int(16) int(0) int(0) int(16)
int(96) int(0) int(0) int(96)
int(96) int(0) int(0) int(96)
int(84) int(0) int(0) int(84)
int(84) int(0) int(0) int(84)
int(84) int(0) int(0) int(84)
int(90) int(0) int(0) int(90)
int(79) int(0) int(0) int(79)
int(16) int(0) int(0) int(16)
int(16) int(0) int(0) int(16)
int(16) int(0) int(0) int(16)
int(16) int(0) int(0) int(16)
int(96) int(0) int(0) int(96)
int(96) int(0) int(0) int(96)
int(84) int(0) int(0) int(84)
int(84) int(0) int(0) int(84)
int(84) int(0) int(0) int(84)
int(90) int(0) int(0) int(90)
int(79) int(0) int(0) int(79)
Cita:
como podeis ver los valores se van demasiado de uno a otro.. y no se me ocurre porque...int(8114697) int(123) int(210) int(9)
int(8114697) int(123) int(210) int(9)
int(8114697) int(123) int(210) int(9)
int(8114697) int(123) int(210) int(9)
int(8114697) int(123) int(210) int(9)
int(8113928) int(123) int(207) int(8)
int(8113928) int(123) int(207) int(8)
int(7654408) int(116) int(204) int(8)
int(7654408) int(116) int(204) int(8)
int(7654408) int(116) int(204) int(8)
int(16448000) int(250) int(250) int(0)
int(16448000) int(250) int(250) int(0)
int(7654408) int(116) int(204) int(8)
int(8114697) int(123) int(210) int(9)
int(8114697) int(123) int(210) int(9)
int(8114697) int(123) int(210) int(9)
int(8114697) int(123) int(210) int(9)
int(8113928) int(123) int(207) int(8)
int(8113928) int(123) int(207) int(8)
int(7654408) int(116) int(204) int(8)
int(7654408) int(116) int(204) int(8)
int(7654408) int(116) int(204) int(8)
int(16448000) int(250) int(250) int(0)
int(16448000) int(250) int(250) int(0)
int(7654408) int(116) int(204) int(8)
en ambos casos recupero la imagen de la carpeta. usan el mismo fondo, las mismas lineas, mismos carácteres.
no deberia haber problema y lo hay

alguna idea?
gracias
nax