Foros del Web » Programando para Internet » PHP »

problema con imagecolorat

Estas en el tema de problema con imagecolorat en el foro de PHP en Foros del Web. Buenas, resulta que estoy trabajando en un script de reconocimiento de captchas y me sucede un problema un tanto singular Este es el captcha ejemplo: ...
  #1 (permalink)  
Antiguo 03/01/2010, 19:38
N4X
 
Fecha de Ingreso: enero-2010
Mensajes: 23
Antigüedad: 14 años, 3 meses
Puntos: 0
problema con imagecolorat

Buenas, resulta que estoy trabajando en un script de reconocimiento de captchas y me sucede un problema un tanto singular

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:

[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
  #2 (permalink)  
Antiguo 03/01/2010, 20:11
 
Fecha de Ingreso: enero-2008
Mensajes: 381
Antigüedad: 16 años, 3 meses
Puntos: 19
Respuesta: problema con imagecolorat

Ya que solo tienes dos colores en la imagen limpiada, porque no haces un echo al resultado de imagecolorat para saber el indice de cada color y despues poder trabar con simples "if ( == )" ?
  #3 (permalink)  
Antiguo 03/01/2010, 21:25
N4X
 
Fecha de Ingreso: enero-2010
Mensajes: 23
Antigüedad: 14 años, 3 meses
Puntos: 0
Respuesta: problema con imagecolorat

tonto de mi no haberlo pensado..

el tema es que el valor era muy pequeño 0 y 1... y al correr bits quedaba todo en 0 ...

enfin gracias solucioné el tema con tu comentario ;)

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 22:41.