0 && $y > 0 && imagesx($img) > $x && imagesy($img) > $y) { // si las coordenadas entran dentro de la imagen $xini = $x; $yini = $y; // guardamos X e Y $c_pixel = imagecolorat($img, $x, $y); // $c_pixel es el color del pixel que estamos tratando if (!isset($c_fondo)) $c_fondo = $c_pixel; // si la variable que contiene el color de fondo que estamos buscando esta pasada por parametro o no while ($c_pixel == $c_fondo && $y > 0 && imagesx($img) > $y) { // bucle que recorre del eje Y del pixel que estamos tratando while ($c_pixel == $c_fondo && $x > 0 && imagesx($img) > $x) { // bucle que recorre del eje X del pixel que estamos tratando if ($modo == \'der\') { // si se esta recorriendo el eje hacia la derecha if (imagecolorat($img,$x-1,$y+1) != $c_fondo && imagecolorat($img,$x,$y+1) == $c_fondo) // inferior izquierda diferente de fondo y el inferior es igual a fondo $img = rellenar($img,$x,$y+1,$c_pintar,$c_fondo); if (imagecolorat($img,$x-1,$y-1) != $c_fondo && imagecolorat($img,$x,$y-1) == $c_fondo) // si el pixel superior izquierda es diferente de fondo y el pixel superior es igual a fondo $img = rellenar($img,$x,$y-1,$c_pintar,$c_fondo); } elseif ($modo == \'izq\') { // si estamos recorriendo el eje hacia la izquierda if (imagecolorat($img,$x+1,$y+1) != $c_fondo && imagecolorat($img,$x,$y+1) == $c_fondo) // si el pixel inferior derecha es diferente de fondo y el pixel inferior es igual a fondo $img = rellenar($img,$x,$y+1,$c_pintar,$c_fondo); if (imagecolorat($img,$x+1,$y-1) != $c_fondo && imagecolorat($img,$x,$y-1) == $c_fondo) // si el pixel superior derecha es diferente de fondo y el pixel superior es igual a fondo $img = rellenar($img,$x,$y-1,$c_pintar,$c_fondo); } else null; imagesetpixel($img,$x,$y,$c_pintar); // pintamos el pixel actual if (!isset($modo)) { // si es el primer pixel que tratamos if (imagecolorat($img,$x+1,$y) == $c_fondo ) { // si el pixel de la derecha tiene un color igual al de fondo $modo = \'der\'; // entramos en modo derecha $x++; // incrementamos en el eje X } else { // si el pixel de la derecha es diferente de fondo entramos en modo izquierda $modo = \'izq\'; $x--; // decrementamos } } elseif ($modo == \'der\') { // si estamos en modo derecha if (imagecolorat($img,$x+1,$y) == $c_fondo ) { // comprobamos el color del pixel de la derecha $x++; } else { // si es diferente del fondo $x = $xini-1; // volvemos a la X inicial menos 1 (para no volver a tratar el pixel inicial $modo = \'izq\'; // entramos en modo izquierda } } else $x--; // si no es ni nulo ni derecha es izquierda, decrementamos $c_pixel = imagecolorat($img, $x, $y); // cojemos el siguiente pixel a tratar } // fin while x $x=$xini; // al salir del bucle de las X volvemos al X inicial if (!isset($dir)) { // si no subimos ni bajamos por el eje Y if (imagecolorat($img,$x,$y+1) == $c_fondo ) { // comprobamos el color del siguiente pixel $dir = \'inc\'; // iniciamos incremento por el eje Y $y++; } else { // entramos en modo descendente $dir = \'dec\'; $y--; } } elseif ($dir == \'inc\') { // si estamos en modo incremento de Y if (imagecolorat($img,$x,$y+1) == $c_fondo ) { // comprobamos color $y++; // incrementamos Y } else { // si es diferente del color de fondo $y = $yini-1; // volvemos a Y inicial $dir = \'dec\'; // cambiamos de direccion } } else $y--; // estamos en modo descendente, decrementamos Y unset($modo); // deseteamos la variable $modo usada para el while de X $c_pixel = imagecolorat($img, $x, $y); // cojemos el siguiente pixel a tratar del eje Y } // fin while y } // fin if x e y return $img; // devolvemos la imagen } function tmm(){ // funcion php4 para sacar los milisegundos, en php5 usad microtime(true) $time=microtime(); $time=explode(\" \",$time); return $time[1]+$time[0]; } $i=imagecreatefrompng(\'nemo.png\'); // obtener de la imagen inicial $microtime = tmm(); // tiempo inicial // colores $rojo = imagecolorallocate($i,255,0,0); $negro = imagecolorallocate($i,0,0,0); $marron = imagecolorallocate($i,96,67,27); $naranja = imagecolorallocate($i,255,124,16); $azul = imagecolorallocate($i,0,0,200); $gris = imagecolorallocate($i,222,222,222); // partes del nemo $i = rellenar($i,284,406,$rojo); // pintar lengua $i = rellenar($i,260,400,$negro); // pintar boca $i = rellenar($i,60,300,$gris); // pintar ojo derecho (des del punto de vista de nemo ;) $i = rellenar($i,200,250,$gris); // pìntar ojo izquierdo $i = rellenar($i,81,436,$naranja); // pintar aleta $i = rellenar($i,333,468,$naranja); // otra parte q no recuerdo cual es $i = rellenar($i,290,475,$naranja); // bueno, ya no recuerdo mas $i = rellenar($i,320,120,$naranja); $i = rellenar($i,275,130,$naranja); $i = rellenar($i,400,200,$naranja); $i = rellenar($i,320,360,$naranja); $i = rellenar($i,300,100,$naranja); $i = rellenar($i,300,160,$gris); // pintar trozo central $i = rellenar($i,1,1,$azul); // pintar fondo ImageString($i, 2, 5, 5, round(tmm()-$microtime, 3).\"\\\"\", $negro); // imprimir tiempo header(\"Content-type: image/png\"); imagepng($i); imagedestroy($i); ?>