Foros del Web » Programando para Internet » PHP »

Lanzar Funcion

Estas en el tema de Lanzar Funcion en el foro de PHP en Foros del Web. Hola tengo una funcion llamada pintar a la qual le paso una image y dos posicioens y queda asi pintar($imagen, $x, $y) y al momento ...
  #1 (permalink)  
Antiguo 24/05/2005, 04:23
 
Fecha de Ingreso: abril-2005
Mensajes: 93
Antigüedad: 12 años, 7 meses
Puntos: 0
Lanzar Funcion

Hola tengo una funcion llamada pintar a la qual le paso una image y dos posicioens y queda asi pintar($imagen, $x, $y) y al momento de lanzarla hago lo siguiente:

if ($imagen = ImageCreateFromJPEG("vaca1.jpg")) {
pintar($imagen, 0, 0);
header('Content-Type: image/jpeg');
ImageJPEG($imagen);
//172
}
pero no me hace nada la funcion me crea la imagen y ya esta la funcion no actua para nada. Me podrian ayudar. Es posible que lance mal la función.
Gracias!!!!!!!!!!!!!!!
  #2 (permalink)  
Antiguo 24/05/2005, 05:16
 
Fecha de Ingreso: diciembre-2003
Mensajes: 213
Antigüedad: 14 años
Puntos: 0
Yo creo que "header" hay que usarlo antes de pintar no? no estoy muy seguro, pero creo que si.
  #3 (permalink)  
Antiguo 24/05/2005, 06:11
Avatar de Pazosele  
Fecha de Ingreso: marzo-2005
Ubicación: BCN - España
Mensajes: 200
Antigüedad: 12 años, 9 meses
Puntos: 0
la funcion que se supone que hace? que tu puedas pintar?
le pasas las posiciones 0, 0 , quizas eso haga que el cursor solo pinte en ese sitio; no deberias asignarle las posiciones del raton?
weno, tpko se si te he entendido, si no es esto, intenta explikarnos un poko mejor :)
__________________
Share our Knowledge!
Adura Vita!
  #4 (permalink)  
Antiguo 24/05/2005, 12:24
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Indica el código completo que usas (tu definición de función y como lo llamas) ... podría ser que tengas problemas con el "ambito de las variables" (por qué asumas algunas globales y no lo sean ... ) Pero todo eso se verá si pones el código completo de uso que haces.

Un saludo,
  #5 (permalink)  
Antiguo 25/05/2005, 03:44
 
Fecha de Ingreso: abril-2005
Mensajes: 93
Antigüedad: 12 años, 7 meses
Puntos: 0
Este es el codigo que tengo pero el problema que tengo es que no me lanza la funcion y no entra en la funcion pintar para poder transformar la imagen a blanco y negro. Haber si me puedes ayudar porque lo he de tener hecho para hoy y no hay manera de resolverlo. Gracias!!!!!

Código PHP:
<?
//creamos la funcion para pintar en la que le pasamos la imagen, la coordenada x y la y

function pintar($imagen$x$y) {
    
    
$w ImageSX($imagen);        //Obtenemos el ancho de la imagen
    
$h ImageSY($imagen);        //Obtenemos el alto de la imagen
    //echo "$w"; 115
    //echo "$h";  82
    
$rastreo = array();        //Todos los puntos de la imagen que se deberan analizar
    
$rastreo = array($x$y);    //Metemos el primer punto en la imagen

//11    
    
while (count($rastreo) > 0) {    //Mientras la cola no este vacia
        
$xy array_shift($rastreo);    //Sacamos el primer punto de la matriz
        
$xr $xy;
                
//Cogemos XRight, el que irá pintando hacia la derecha
        
$xl $xr-1;            //Cogemos XLeft, el que irá pintando hacia la izquierda                //pero uno menos que XRight porque ese punto ya esta pintando 
        
$y$xy;
                
//Cogemos la Y
        
$yu=$y+1;            //Cogmeos yu, la que pintara hacia arriba
        
$yd=$y-1;            //Cogemos yd, la que pintara hacia abajo

//21        
        //Cogemos el color negro en hexadecimal y lo transformamos a decimal lo mismo hacemos con el color gris

        
$grishex="626262";
        
$negrehex=000000;
        
$grisdec=hexdec($grishex);
        
$negredec=hexdec($negrehex);
        
$coldec ImageColorAt($imagen$xr$y);
        
//echo "$coldec";
        //Miramos si el color del pixel lo tenemos que tratar como una mancha o como parte del cuerpo
        
if (($negredec <= $coldec) && ($coldec <= grisdec)) {
//31      
        //echo "fsdafdsa";
        //Mientras  no se salga de los limites de la imagen
        
while ($xr+$w) {
                
//echo "$xr";
                //Si el pixel es negro lo seguimos pintando de negro
                
if (($negredec <= ImageColorAt($imagen$xr$yu)) && (ImageColorAt($imagen$xr$yu) <= $grisdec)) {
            
//Pintamos la imagen de negro ya que es una mancha de la vaca
            
$negrehex1"000000";
            
$negredec1=hexdec($negrehex1);
            
$negrehex2"000000";
            
$negredec2=hexdec($negrehex2);
//41    
            
$negrehex3="000000";
            
$negredec3=hexdec($negrehex3);            

            
$color =  ImageColorAllocate($imagen$negredec1$negredec2$negredec3); 
            
ImageSetPixel($imagen$xr$y$color);    //Pintamos el pixel
            
            
if($yu $h)    {        //Si el punto de encima esta dentro de la imagen
                
if (($negredec <= ImageColorAt($imagen$xr$yu)) && (ImageColorAt($imagen$xr$yu) <= $grisdec)) {    //Y es del mismo color    
                    //Lo metemos dentro de la cola para colorearlo posteriormente
//51
                    
$rastreo = array($xr,$yu);} 
                    }    
            
            if(
$yd 0) {     //Realizamos las mismas operaciones pero por debajo
                
if (($negredec <= ImageColorAt($imagen$xr$yu)) && (ImageColorAt($imagen$xr$yu) <= $grisdec)) {
                    
$rastreo = array($xr$yd);}    
                    }
                    }
            
//Aumentamos en uno hacia la derecha
            
++$xr;    
//61    
}

        
//Bucle identico al anterior lo unico que va hacia la izquierda de la imagen
        
while ($xl->0) {
            
//Pasamos a decimal el color negro para poder pintar en rgb
//71        si el pixel sigue siguiente es negro seguimos pintando de negro
            
if (($negredec <= ImageColorAt($imagen$xl$yu)) && (ImageColorAt($imagen$xl$yu) <= $grisdec)) {
            
$negrehex4"000000";
            
$negredec4hexdec($negrehex4);
            
$negrehex5"000000";
            
$negredec5=hexdec($negrehex5);
            
$negrehex6"000000";
            
$negredec6=hexdec($negrehex6);
            
//Pintamos la imagen de negro ya que es una mancha de la vaca
            
$color =  ImageColorAllocate($imagen$negredec4$negredec5$negredec6); 
            
ImageSetPixel($imagen$xl$y$color);
//81    
    
            
if($yu $h) {    //Si no nos salimos por la parte superior de la imagen
            
if (($negredec <= ImageColorAt($imagen$xl$yu)) && (ImageColorAt($imagen$xl$yu) <= $grisdec)) {
                
$rastreo[] = array($xl$yu); }
                }
            if(
$yu 0) {    //Si no nos salimos por la parte de abajo de la imagen
            
if (($negredec <= ImageColorAt($imagen$xl$yu)) && (ImageColorAt($imagen$xl$yu) <= $grisdec)) {
                
$rastreo[] = array($xl$yu); }
                }
                }
//91    
    
--$xl;
    }
    }
        
        
//Si el color no se encuentra entre esos valores se trata de una parte del cuerpo de la vaca
    
else {
            
        
//Mientras no se salga de los limites de la imagen
        
while ($xr+$w) {
//101    
            //Si el pixel sigue siendo blanco seguimos pintando de blanco
            
if (($negredec ImageColorAt($imagen$xr$yu)) && (ImageColorAt($imagen$xr$yu) > $grisdec)) {
            
//Pasamos a decimal el color blanco para poder pintar en rgb
            
$blancohex1="FFFFFF";
            
$blancodec1=hexdec($blancohex1);
            
$blancohex2="FFFFFF";
            
$blancodec2=hexdec($blancohex2);
            
$blancohex3="FFFFFF";
            
$blancodec3=hexdec($blancohex3);    
            
//Pintamos la imagen de blanco ya que es una parte del cuerpo
    
//111    
            
$color =  ImageColorAllocate($imagen$blancodec1$blancodec2$blancodec3); 
            
//echo "$color";
            //echo "a";
            //echo "$xr";
            //echo "d";
            //echo "$y";
            
ImageSetPixel($imagen$xr$y$color);    //Pintamos el pixel
            
            
if($yu $h)    {        //Si el punto de encima esta dentro de la imagen
                //echo "barça";
                
if (($negredec ImageColorAt($imagen$xr$yu)) && (ImageColorAt($imagen$xr$yu) > $grisdec)) {    //Y es del mismo color    
                    //Lo metemos dentro de la cola para colorearlo posteriormente
                    
$rastreo = array($xr,$yu);} 
                    }    
            
//121    
            
if($yd 0) {     //Realizamos las mismas operaciones pero por debajo
                
if (($negredec ImageColorAt($imagen$xr$yu)) && (ImageColorAt($imagen$xr$yu) > $grisdec)) {
                    
$rastreo = array($xr$yd);}    
                    }
                    }
            ++
$xr;    //Aumentamos en uno hacia la derecha
            //echo "$xr";
            //echo "barça";
         
}

        

//131

        //Bucle identico al anterior lo unico que va hacia la izquierda de la imagen
        
while ($xl->0) {
        if ((
$negredec ImageColorAt($imagen$xl$yu)) && (ImageColorAt($imagen$xl$yu) > $grisdec)) {
            
//Pasamos a decimal el color blanco para poder pintar en rgb
            
$blancohex4="FFFFFF";
            
$blancodec4=hexdec($blancohex4);
            
$blancohex5="FFFFFF";
            
$blancodec5=hexdec($blancohex5);
            
$blancohex6="FFFFFF";
//141
            
$blancodec6=hexdec($blancohex);
            
$blancohex6=hexdec($blancodec);

            
//Pintamos la imagen de blanco ya que se trata de una parte del cuerpo
            
$color =  ImageColorAllocate($imagen$blancodec4$blancodec5$blancodec6); 
            
ImageSetPixel($imagen$xl$y$color);
        
            if(
$yu $h) {    //Si no nos salimos por la parte superior de la imagen
            
if (($negredec ImageColorAt($imagen$xl$yu)) && (ImageColorAt($imagen$xl$yu) > $grisdec)) {
//151
                
$rastreo[] = array($xl$yu); }
                }
            if(
$yu 0) {    //Si no nos salimos por la parte de abajo de la imagen
            
if (($negredec ImageColorAt($imagen$xl$yu)) && (ImageColorAt($imagen$xl$yu) > $grisdec)) {
                
$rastreo[] = array($xl$yu); }
            }
            }
        --
$xl;
        }

//161
     
}

 }
 return 
$imagen;
}


if (
$imagen ImageCreateFromJPEG("vaca1.jpg")) {
header('Content-Type: image/jpeg');
$a=pintar($imagen00);
//header('Content-Type: image/jpeg');
ImageJPEG($a);
//172
}
else{
echo 
"No se ha encontrado la imagen";
}
?>

Última edición por Cluster; 25/05/2005 a las 09:57
  #6 (permalink)  
Antiguo 25/05/2005, 07:00
Avatar de Pazosele  
Fecha de Ingreso: marzo-2005
Ubicación: BCN - España
Mensajes: 200
Antigüedad: 12 años, 9 meses
Puntos: 0
solo un matiz: Por Favor, ilumina el codigo!!
(pon las etiquetas [ P H P ] y [ / P H P ] antes y despues del codigo)
[sin espacios]
__________________
Share our Knowledge!
Adura Vita!
  #7 (permalink)  
Antiguo 25/05/2005, 10:16
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Esa función la debes llamar desde un script aparte (ya que generas cabeceras HTTP vía header() entre otras cosas)

A dicha función le tendrás que pasar los parámetros que corresponda.


Puedes tener un scritp con todas tus funciones tipo:

funciones.php
Código PHP:
<?
function pintar($imagen$x$y) {
// etc ...
}
?>
Y tu script que va a funciona -autónomo- para generar tu imagen:

genera_imagen.php
Código PHP:
if ($imagen ImageCreateFromJPEG("vaca1.jpg")) { 
    
header('Content-Type: image/jpeg'); 
    
$a=pintar($imagen00); 
    
ImageJPEG($a); 

?> 
Ese script debes llamarlo desde un tag de imagen HTML donde lo requieras tipo:
Al generar una imagen dinámicamente .. si quieres ofrecer ese "mensaje" de que no se econtró la imagen .. tienes dos opciones:

1) .. en el "else" de ese IF() generas una imagen característica de "no disponible" tipo:
Código PHP:
    $imagen=ImageCreateFromJPEG("no_disponible.jpg")) { 
    
header('Content-Type: image/jpeg'); 
    
ImageJPEG($a); 
2) .. la validación de si existe la imagen .. lo haces con otras funciones como is_exists() aplicado a tu archivo de imagen y validas en el script que llama a tus imagenes tipo:

Código PHP:
$imagen="vaca1.jpg";
if (
is_file($imagen)){
   echo 
"<img src=\"genera_imagen.php?imagen=$imagen\">";
} else {
   echo 
"<img src=\"no_disponible.jpg\">";

Su llamada lo has visto ya .. sería:

Código PHP:
<img src="genera_imagen.php"
y hasta si quieres .. le pasas como parámetro ese nombre del archivo de tu imagen a procesar (por si tienes que hacer várias en un mismo script ..):

genera_imagen.php
Código PHP:
<?
include ("funciones.php");
  if (
$imagen ImageCreateFromJPEG($_GET['imagen'])) {
     
// etc ....
?>
Su uso sería:
Código PHP:
<img src="genera_imagen.php?imagen=vaca1.jpg">
<
img src="genera_imagen.php?imagen=otra.jpg"
Un saludo,
  #8 (permalink)  
Antiguo 25/05/2005, 10:55
 
Fecha de Ingreso: abril-2005
Mensajes: 93
Antigüedad: 12 años, 7 meses
Puntos: 0
No te entiendo bien haber genero un archivo php que en este caso es funciones.php donde tendre almacenado todas las funciones y despues tengo que generar otro que es genera_imagen.php donde tendre el siguiente codigo
[PHP]
<?
if ($imagen = ImageCreateFromJPEG("vaca1.jpg")) {
header('Content-Type: image/jpeg');
$a=pintar($imagen, 0, 0);
ImageJPEG($a);
}


El archivo genera_imagen.php no te entiendo lo que tengo que poner.
  #9 (permalink)  
Antiguo 25/05/2005, 11:15
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
El ejemplo es el que te dí ..

Código PHP:
<?
include("funciones.php");
if (
$imagen ImageCreateFromJPEG("vaca1.jpg")) { 
    
header('Content-Type: image/jpeg'); 
    
$a=pintar($imagen00); 
    
ImageJPEG($a); 

?>
Y lo debes llamar desde otros scripts en tus páginas HTML con su tag de imagen como te mostré los ejemplos (o para probar ahora directamente por el URL: http://localhost/genera_imagen.php)

Un saludo,
  #10 (permalink)  
Antiguo 25/05/2005, 12:49
 
Fecha de Ingreso: abril-2005
Mensajes: 93
Antigüedad: 12 años, 7 meses
Puntos: 0
No funciona cluster gracias por la ayuda pero no funciona no se si es por error en la funcion o es porque no lo manda bien la funcion.
  #11 (permalink)  
Antiguo 25/05/2005, 12:54
 
Fecha de Ingreso: abril-2005
Mensajes: 93
Antigüedad: 12 años, 7 meses
Puntos: 0
Funcion Pintar

Hola cluster gracias por la ayuda pero nada me creo que no lanza la funcion ni nada porque sala la imagen en color no le hace nada de nada.

Haber si lo puedo solucionar si te pudieras mirar el codigo que hay arriba para ver si ves algun error es que no le encuentro el error. Gracias

Última edición por lochino006; 25/05/2005 a las 13:03
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 21:57.