Foros del Web » Programando para Internet » PHP »

¿como Solucionar Esto?

Estas en el tema de ¿como Solucionar Esto? en el foro de PHP en Foros del Web. Hola: Tengo un pequeño problemilla con un programilla de creación de miniaturas de las imagenes. Resulta que el programa funciona correctamente de la siguiente forma: ...
  #1 (permalink)  
Antiguo 07/04/2004, 02:42
 
Fecha de Ingreso: abril-2003
Mensajes: 363
Antigüedad: 21 años
Puntos: 3
¿como Solucionar Esto?

Hola:
Tengo un pequeño problemilla con un programilla de creación de miniaturas de las imagenes.

Resulta que el programa funciona correctamente de la siguiente forma:

Código PHP:
<?php

  
function redimensionar_jpeg($img_original$img_nueva$anchura$altura,$img_nueva_calidad) {

    
// crear imagen desde original
    
$img ImageCreateFromJPEG($img_original);
    
    
//miramos el tamaño de la imagen original
    
$datos getimagesize("original.jpg");

    
//Si el alto es mas grande que el ancho
    
if($datos[1]>$datos[0]){
    
        
//intentamos escalar la imagen original a la medida que nos interesa
        
$ratio = ($datos[1] / $altura);
           
$anchura round($datos[0] / $ratio);
    
            
// crear imagen nueva
           
$thumb ImageCreateTrueColor($anchura,$altura);
    
           
// redimensionar imagen original copiandola en la imagen
        
ImageCopyResized($thumb,$img,0,0,0,0,$anchura,$altura,$datos[0],$datos[1]);
    
            
// guardar la imagen redimensionada donde indicia $img_nueva
            
ImageJPEG($thumb,$img_nueva,$img_nueva_calidad);
    }

    
//Si el ancho es mas grande que el alto
    
if($datos[0]>$datos[1]){
    
        
//intentamos escalar la imagen original a la medida que nos interesa
        
$ratio = ($datos[0] / $anchura);
            
$altura round($datos[1] / $ratio);
    
            
// crear imagen nueva
            
$thumb ImageCreateTrueColor($anchura,$altura);
    
            
// redimensionar imagen original copiandola en la imagen
        
ImageCopyResized($thumb,$img,0,0,0,0,$anchura,$altura,$datos[0],$datos[1]);
    
            
// guardar la imagen redimensionada donde indicia $img_nueva
            
ImageJPEG($thumb,$img_nueva,$img_nueva_calidad);
    }
    
  }

  
redimensionar_jpeg("original.jpg","mini_original.jpg",200,200,100);
?>

El problema es que necesito que ahora el nombre de la imagen orgiginal me le den por un formulario, por el cual me pasan la variable $foto (nombre de la imagen original).
Entonces el programa quedaría de la forma:

Código PHP:
<?php
  
  
function redimensionar_jpeg($img_original$img_nueva$anchura$altura,$img_nueva_calidad) {
    
    
// crear imagen desde original
    
$img ImageCreateFromJPEG($img_original);
    
    
//miramos el tamaño de la imagen original
    
$datos getimagesize($foto);

    
//Si el alto es mas grande que el ancho
    
if($datos[1]>$datos[0]){
    
        
//intentamos escalar la imagen original a la medida que nos interesa
        
$ratio = ($datos[1] / $altura);
           
$anchura round($datos[0] / $ratio);
    
            
// crear imagen nueva
           
$thumb ImageCreateTrueColor($anchura,$altura);
    
           
// redimensionar imagen original copiandola en la imagen
        
ImageCopyResized($thumb,$img,0,0,0,0,$anchura,$altura,$datos[0],$datos[1]);
    
            
// guardar la imagen redimensionada donde indicia $img_nueva
            
ImageJPEG($thumb,$img_nueva,$img_nueva_calidad);
    }

    
//Si el ancho es mas grande que el alto
    
if($datos[0]>$datos[1]){
    
        
//intentamos escalar la imagen original a la medida que nos interesa
        
$ratio = ($datos[0] / $anchura);
            
$altura round($datos[1] / $ratio);
    
            
// crear imagen nueva
            
$thumb ImageCreateTrueColor($anchura,$altura);
    
            
// redimensionar imagen original copiandola en la imagen
        
ImageCopyResized($thumb,$img,0,0,0,0,$anchura,$altura,$datos[0],$datos[1]);
    
            
// guardar la imagen redimensionada donde indicia $img_nueva
            
ImageJPEG($thumb,$img_nueva,$img_nueva_calidad);
    }
    
  }

  
redimensionar_jpeg($foto,"mini_" .$foto,200,200,100);
?>
Pero no funciona.
¿Cual es el problema? ¿Que tengo que cambiar?

Muchas Gracias

Última edición por yazo; 07/04/2004 a las 02:43
  #2 (permalink)  
Antiguo 07/04/2004, 03:09
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Hola,

El problema es el ambito de las variables: http://www.php.net/manual/en/languag...bles.scope.php

Asi que yo te recomiendo que pases el nombre como otro parametro mas a la funcion. Asi te servira en caso de cambiar el nombre del campo.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #3 (permalink)  
Antiguo 07/04/2004, 03:37
 
Fecha de Ingreso: abril-2003
Mensajes: 363
Antigüedad: 21 años
Puntos: 3
¿podrias ser un poco mas concreto? Esque yo algo si que se de PHP pero no mucho. ¿Me podrías decir a que te refieres concretamente? ¿Un pequeño ejemplo?

Muchisimas gracias por contestar
  #4 (permalink)  
Antiguo 07/04/2004, 04:17
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
En la pagina del manual tenias ejemplos, pero basicamente tu caso es este:
Código PHP:
function b() {
  echo 
$a;
}

$a='pepe';
b(); 
Y lo que deberias tener es:
Código PHP:
function b($a) {
  echo 
$a;
}

$a='pepe';
b($a); 
Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #5 (permalink)  
Antiguo 07/04/2004, 04:47
 
Fecha de Ingreso: abril-2003
Mensajes: 363
Antigüedad: 21 años
Puntos: 3
Sigo sin conseguirlo.
Según he entendido a josemi he hecho las siguientes modificaciones:

Código PHP:
<?php

  
function b($foto) {
  echo 
$foto;
  }
  
  function 
c($foto) {
  echo 
"mini_"$foto;
  }

  function 
redimensionar_jpeg($img_original$img_nueva$anchura$altura,$img_nueva_calidad) {

    
// crear imagen desde original
    
$img ImageCreateFromJPEG($img_original);
    
    
//miramos el tamaño de la imagen original
    
$datos getimagesize(b($foto));

    
//Si el alto es mas grande que el ancho
    
if($datos[1]>$datos[0]){
    
        
//intentamos escalar la imagen original a la medida que nos interesa
        
$ratio = ($datos[1] / $altura);
           
$anchura round($datos[0] / $ratio);
    
            
// crear imagen nueva
           
$thumb ImageCreateTrueColor($anchura,$altura);
    
           
// redimensionar imagen original copiandola en la imagen
        
ImageCopyResized($thumb,$img,0,0,0,0,$anchura,$altura,$datos[0],$datos[1]);
    
            
// guardar la imagen redimensionada donde indicia $img_nueva
            
ImageJPEG($thumb,$img_nueva,$img_nueva_calidad);
    }

    
//Si el ancho es mas grande que el alto
    
if($datos[0]>$datos[1]){
    
        
//intentamos escalar la imagen original a la medida que nos interesa
        
$ratio = ($datos[0] / $anchura);
            
$altura round($datos[1] / $ratio);
    
            
// crear imagen nueva
            
$thumb ImageCreateTrueColor($anchura,$altura);
    
            
// redimensionar imagen original copiandola en la imagen
        
ImageCopyResized($thumb,$img,0,0,0,0,$anchura,$altura,$datos[0],$datos[1]);
    
            
// guardar la imagen redimensionada donde indicia $img_nueva
            
ImageJPEG($thumb,$img_nueva,$img_nueva_calidad);
    }
    
  }

  
redimensionar_jpeg(b($foto),c($foto),200,200,100);
?>
¿Me podeis ayudar?
Gracias
  #6 (permalink)  
Antiguo 07/04/2004, 04:56
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
No, el codigo que puse era de ejemplo. b() era redimensionar_jpeg(), es a redimensionar_jpeg() a quien debes pasarle como parametro $foto.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #7 (permalink)  
Antiguo 07/04/2004, 05:01
 
Fecha de Ingreso: abril-2003
Mensajes: 363
Antigüedad: 21 años
Puntos: 3
¿Me lo puedes hacer con mi programilla?
Esque he probado de todas las formas que yo se y no lo he conseguido.

Me harían un gran favor

Muchas Gracias
  #8 (permalink)  
Antiguo 07/04/2004, 05:35
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Veamos, no te lo he hecho con tu programa porque tu programa no es un buen ejemplo de la causa del problema. Inentaba que entendieras el problema.

Porque creo que te hubiese dicho:

En tu codigo simplemente dentro de la funcion redimensionar_jpeg() sustituye $foto por $img_original y ya esta, y te queda:
Código PHP:

<?php

  

  
function redimensionar_jpeg($img_original$img_nueva$anchura$altura,$img_nueva_calidad) {

    

    
// crear imagen desde original

    
$img ImageCreateFromJPEG($img_original);

    

    
//miramos el tamaño de la imagen original

    
$datos getimagesize($img_original);



    
//Si el alto es mas grande que el ancho

    
if($datos[1]>$datos[0]){

    

        
//intentamos escalar la imagen original a la medida que nos interesa

        
$ratio = ($datos[1] / $altura);

           
$anchura round($datos[0] / $ratio);

    

            
// crear imagen nueva

           
$thumb ImageCreateTrueColor($anchura,$altura);

    

           
// redimensionar imagen original copiandola en la imagen

         
ImageCopyResized($thumb,$img,0,0,0,0,$anchura,$a
ltura
,$datos[0],$datos[1]);

    

            
// guardar la imagen redimensionada donde indicia $img_nueva

            
ImageJPEG($thumb,$img_nueva,$img_nueva_calidad);

    }



    
//Si el ancho es mas grande que el alto

    
if($datos[0]>$datos[1]){

    

        
//intentamos escalar la imagen original a la medida que nos interesa

        
$ratio = ($datos[0] / $anchura);

            
$altura round($datos[1] / $ratio);

    

            
// crear imagen nueva

            
$thumb ImageCreateTrueColor($anchura,$altura);

    

            
// redimensionar imagen original copiandola en la imagen

         
ImageCopyResized($thumb,$img,0,0,0,0,$anchura,$a
ltura
,$datos[0],$datos[1]);

    

            
// guardar la imagen redimensionada donde indicia $img_nueva

            
ImageJPEG($thumb,$img_nueva,$img_nueva_calidad);

    }

    

  }



  
redimensionar_jpeg($foto,"mini_" .$foto,200,200,100);

?>
fin.

Sinceramente, no se si de ahi entenderias que dentro de la funcion no tienes acceso a las variables definidas fuera de la funcion, tal como explica la pagina del manual que te puse (¿la leiste?). Y que creo que es mejor pasar los valores como parametros, no intentar acceder a las variables "globales" directamente.

Creo que para aprender tienes que pegarte con el problema, entenderlo y una vez entendido, pelearte con la solucion. Esto supone leer, volver a leer, probar, volver a leer, si no se tiene claro preguntar sobre eso en concreto que no se tiene claro, volver a leer, volver a probar, etc. Proceso que puede llevarte 1 hora, 5 minutos o 3 dias.

Pero una vez entendido el problema y la solucion, la proxima vez que tengas un problema parecido (no exactamente igual), lo podras resolver en un abrir y cerrar de ojos.

Ademas, cuando contesto, intento que la contestacion sirva a cualquiera que tenga una duda parecida que pueda que lea este mensaje. Asi que no es una contestacion solo para tu caso concreto, sino para la causa de tu problema concreto.

Saludos.

PD: yazo, no es una critica contra ti ni contra tu mensaje, es simplemente una "declaracion de intenciones", un explicacion de por que no suelo poner el codigo solucion directamente (a no ser que el codigo sea mas explicativo que una explicacion mia).
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #9 (permalink)  
Antiguo 07/04/2004, 07:06
 
Fecha de Ingreso: abril-2003
Mensajes: 363
Antigüedad: 21 años
Puntos: 3
Muchas Gracias

Ahora ya lo entiendo todo, lo que no había entendido era lo de no poder usar las variables globales dentro de la función.

Muchas Gracias por tu ayuda.
  #10 (permalink)  
Antiguo 07/04/2004, 07:13
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Para usar una variable en una función que declaras fuera de tu función y no la pasas como parámetro en dicha función tienes que declararla como global en la función:

Código PHP:
$a="blabla";
function 
nose(){
global 
$a;

echo 
$a

Pero .. a nivel de variables exiten algunas que son ya de por sí "globales" como por ejemplos los arrays: $_GET, $_POST .. etc (no así los $HTTP_POST_VARS, etc ...). Es decir .. para variables que te llegan de un formulario/URL (o sesiones si usas $_SESSION, cookeis si usas $_COOKIE .. etc) no tendrías que definirlas como "global $_GET" por qué ya lo són.

Bueno, todo esto lo detalla el manual de PHP oficial en el link que dejó Josemi y afines.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
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 10:02.