Este es el captcha ejemplo:
y esta una letra aislada por el script, con la previa funciona Limpiar() aplicada
remarco lo de la función Limpiar() aplicada porque como veis, lo que hace es eliminar el fondo y trabajar con 2 colores, blanco y negro.
de esa función resalto esto:
Código
//Recorremos cada pixel for ($x = 0; $x < $w; $x++) { for ($y = 0; $y < $h; $y++) { //asignamos los valores numéricos a los canales RGB $r = ($rgb >> 16) & 255; $g = ($rgb >> 8) & 255; $b = $rgb & 255; if ($r > 220 && $g < 200 && $b < 200) { } else { } } } //End for
sobre todo el tema $rgb con la función imagecolorat. en este caso funciona perfectamente.
después de aislar la imagen, la idea es crear un registro de cada pixel y el color que contiene (blanco o negro) entonces para ello uso otra funcion createdatamap()
Código
for ($x = 0; $x < $w; $x++) { for ($y = 0; $y < $h; $y++) { $r = ($rgb >> 16) & 255; $g = ($rgb >> 8) & 255; $b = $rgb && 255; if ($r < 220) $color = 1; else $color = 0; //creamos el datamap $datamap .=":".$x.",".$y.",".$color; }
ahora... el problema está en el $rgb....
a diferencia del caso anterior me reconoce todo como 0 ($color = 0) y nunca como 1. es decir nunca encuentra negro y siempre blanco...
le di muchas vueltas a las imagenes prové de crear el datamap sin separar las imagenes.. enfin un monton de cosas...
al final empezé a dumpear las variables y encntré que el $rgb es 0... es decir no toma valor... porqué? no lo se... en la función anterior el $rgb si toma valor al querer limpiar el fondo, pero en este no..
aunque yo los vea igual..
en los 2 casos $w y $h se sacan de aqui:
Código
y $imagen en la primera función es la imagen del captcha y en la 2nda es el carcter limpio
saludos y gracias
nax