Este es el captcha ejemplo:
![](http://img64.imageshack.us/img64/1183/6789ab.png)
y esta una letra aislada por el script, con la previa funciona Limpiar() aplicada
![](http://img69.imageshack.us/img69/8572/char1.png)
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:
[code=php] //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;
if ($r > 220 && $g < 200 && $b < 200) {
$f = imagecolorresolve($newimg, 0, 0, 0);
imagesetpixel($newimg, $x, $y, $f); //Pintamos negro si es una letra roja
} else {
$f = imagecolorresolve($newimg, 255, 255, 255);
imagesetpixel($newimg, $x, $y, $f); //Sino pintamos blanco
}
}
} //End for[/code]
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()
[code=php] for ($x = 0; $x < $w; $x++) {
for ($y = 0; $y < $h; $y++) {
$rgb = imagecolorat($imagen, $x, $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;
}[/code]
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:
[code=php] $w = imagesx($imagen);
$h = imagesy($imagen);[/code]
y $imagen en la primera función es la imagen del captcha y en la 2nda es el carcter limpio
saludos y gracias
nax