Foros del Web » Programando para Internet » PHP »

Resize Images

Estas en el tema de Resize Images en el foro de PHP en Foros del Web. Estimados ¿Como andan? en esta oportunidad los molesto ya que estoy con un problema, estoy utilizando una libreria que se encarga del resize de imagenes, ...
  #1 (permalink)  
Antiguo 02/03/2011, 11:27
 
Fecha de Ingreso: noviembre-2010
Ubicación: Capital Federal, Buenos Aires
Mensajes: 60
Antigüedad: 13 años, 4 meses
Puntos: 0
Resize Images

Estimados ¿Como andan? en esta oportunidad los molesto ya que estoy con un problema, estoy utilizando una libreria que se encarga del resize de imagenes, la utilizo mediante con include, sube de a 10 archivos a la vez, el problema es que si la libreria no tiene los 10 archivos emite error, ¿Que se podría modificar el siguiente código?

Archivo resize.php

Código PHP:
<?php

class thumbnail
{
    var 
$img;

    function 
thumbnail($imgfile)
    {
        
//detectando el formato de la imagen
        
$this->img["format"]=ereg_replace(".*\.(.*)$","\\1",$imgfile);
        
$this->img["format"]=strtoupper($this->img["format"]);
        if (
$this->img["format"]=="JPG" || $this->img["format"]=="JPEG") {
            
//JPEG
            
$this->img["format"]="JPEG";
            
$this->img["src"] = ImageCreateFromJPEG ($imgfile);
        } elseif (
$this->img["format"]=="PNG") {
            
//PNG
            
$this->img["format"]="PNG";
            
$this->img["src"] = ImageCreateFromPNG ($imgfile);
        } elseif (
$this->img["format"]=="GIF") {
            
//GIF
            
$this->img["format"]="GIF";
            
$this->img["src"] = ImageCreateFromGIF ($imgfile);
        } elseif (
$this->img["format"]=="WBMP") {
            
//WBMP
            
$this->img["format"]="WBMP";
            
$this->img["src"] = ImageCreateFromWBMP ($imgfile);
        } else {
            
//defecto
            
echo "Not Supported File";
            exit();
        }
        @
$this->img["lebar"] = imagesx($this->img["src"]);
        @
$this->img["tinggi"] = imagesy($this->img["src"]);
        
//calidad por defecto jpeg
        
$this->img["quality"]=75;
    }

    function 
size_height($size=100)
    {
        
//alto
        
$this->img["tinggi_thumb"]=$size;
        @
$this->img["lebar_thumb"] = ($this->img["tinggi_thumb"]/$this->img["tinggi"])*$this->img["lebar"];
    }

    function 
size_width($size=100)
    {
        
//ancho
        
$this->img["lebar_thumb"]=$size;
        @
$this->img["tinggi_thumb"] = ($this->img["lebar_thumb"]/$this->img["lebar"])*$this->img["tinggi"];
    }

    function 
size_auto($size=100)
    {
        
//tamaño
        
if ($this->img["lebar"]>=$this->img["tinggi"]) {
            
$this->img["lebar_thumb"]=$size;
            @
$this->img["tinggi_thumb"] = ($this->img["lebar_thumb"]/$this->img["lebar"])*$this->img["tinggi"];
        } else {
            
$this->img["tinggi_thumb"]=$size;
            @
$this->img["lebar_thumb"] = ($this->img["tinggi_thumb"]/$this->img["tinggi"])*$this->img["lebar"];
         }
    }

    function 
jpeg_quality($quality=75)
    {
        
//jpeg calidad
        
$this->img["quality"]=$quality;
    }

    function 
show()
    {
        
//el thumb
        
@Header("Content-Type: image/".$this->img["format"]);


        
$this->img["des"] = ImageCreateTrueColor($this->img["lebar_thumb"],$this->img["tinggi_thumb"]);
            @
imagecopyresized ($this->img["des"], $this->img["src"], 0000$this->img["lebar_thumb"], $this->img["tinggi_thumb"], $this->img["lebar"], $this->img["tinggi"]);

        if (
$this->img["format"]=="JPG" || $this->img["format"]=="JPEG") {
            
//JPEG
            
imageJPEG($this->img["des"],"",$this->img["quality"]);
        } elseif (
$this->img["format"]=="PNG") {
            
//PNG
            
imagePNG($this->img["des"]);
        } elseif (
$this->img["format"]=="GIF") {
            
//GIF
            
imageGIF($this->img["des"]);
        } elseif (
$this->img["format"]=="WBMP") {
            
//WBMP
            
imageWBMP($this->img["des"]);
        }
    }

    function 
save($save="")
    {
        
//guarda el thumb
        
if (empty($save)) $save=strtolower("./thumb.".$this->img["format"]);

        
$this->img["des"] = ImageCreateTrueColor($this->img["lebar_thumb"],$this->img["tinggi_thumb"]);
            @
imagecopyresized ($this->img["des"], $this->img["src"], 0000$this->img["lebar_thumb"], $this->img["tinggi_thumb"], $this->img["lebar"], $this->img["tinggi"]);

        if (
$this->img["format"]=="JPG" || $this->img["format"]=="JPEG") {
            
//JPEG
            
imageJPEG($this->img["des"],"$save",$this->img["quality"]);
        } elseif (
$this->img["format"]=="PNG") {
            
//PNG
            
imagePNG($this->img["des"],"$save");
        } elseif (
$this->img["format"]=="GIF") {
            
//GIF
            
imageGIF($this->img["des"],"$save");
        } elseif (
$this->img["format"]=="WBMP") {
            
//WBMP
            
imageWBMP($this->img["des"],"$save");
        }
    }
}
?>
Yo llamo al archivo de la siguiente manera:

xx.php

Código PHP:
                        $repo_dir "propiedades/casa";
                if( ! 
is_dir($repo_dir)){
                
mkdir$repo_dir );                    
                }
                
$user_dir $repo_dir."/".$aData['calle'];
                if( ! 
is_dir($user_dir)){
                
mkdir$user_dir );                    
                }
        
    
$misImagenes = array( $_FILES['foto1'], $_FILES['foto2'], $_FILES['foto3'], $_FILES['foto4'], $_FILES['foto5'], $_FILES['foto6'], $_FILES['foto7'], $_FILES['foto8'], $_FILES['foto9'], $_FILES['foto10'] );

    foreach( 
$misImagenes as $img ){
    if( 
$img ){

                
move_uploaded_file$img['tmp_name'], $user_dir.'/'.$img['name'] );


                    require_once( 
"resize.php" );
                    
                    
$thumb = new thumbnail$user_dir.'/'.$img['name'] );
                    
                    
$thumb->size_auto(320);
                    
                    
$thumb->save($user_dir.'/thumb_'.$img['name']); 

Luego hago un query para guardar los path en la base de datos.-


El error que emite es el echo


echo "Not Supported File";



Mil gracias a todos!

Última edición por PxHx; 02/03/2011 a las 11:29 Razón: Nombre los archivos
  #2 (permalink)  
Antiguo 02/03/2011, 11:37
Avatar de darkasecas  
Fecha de Ingreso: marzo-2005
Ubicación: SantaCata, NL, Mexico
Mensajes: 1.553
Antigüedad: 19 años, 1 mes
Puntos: 77
Respuesta: Resize Images

Aunque no subas un archivo, $_FILES['archivo'] nunca va a estar vacio, tendrias que revisar si se subio el archivo, por ejemplo con is_uploaded_file()
  #3 (permalink)  
Antiguo 02/03/2011, 11:38
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Resize Images

la solución no consiste en modificar la clase, sino en hacer las comparaciones lógicas correspondientes en tu script antes de usar la clase...

y es verdaderamente simple, si no subes 10 archivos... ¿porque obligas a tu código a usar siempre 10 variables?

¿no te parece fuera de lugar?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #4 (permalink)  
Antiguo 02/03/2011, 11:41
 
Fecha de Ingreso: noviembre-2010
Ubicación: Capital Federal, Buenos Aires
Mensajes: 60
Antigüedad: 13 años, 4 meses
Puntos: 0
Respuesta: Resize Images

Comprendo, es decir, antes de que genere aplique el resize, mueva el archivo y haga el query deberia "leer" que campos estan completos y de acuerdo a eso aplicar el resize, mover el archivo y generar el query ¿Verdad?

¿De que manera me recomiendan hacer eso?

Estoy perdido!


Muchas gracias a ambos por la respuesta y el tiempo!
  #5 (permalink)  
Antiguo 05/03/2011, 08:29
 
Fecha de Ingreso: noviembre-2010
Ubicación: Capital Federal, Buenos Aires
Mensajes: 60
Antigüedad: 13 años, 4 meses
Puntos: 0
Respuesta: Resize Images

¿Alguna ayuda? No se como resolverlo


Gracias
  #6 (permalink)  
Antiguo 05/03/2011, 10:48
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Resize Images

usa la función que te han recomendado, por favor, lee el manual...
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #7 (permalink)  
Antiguo 05/03/2011, 11:35
 
Fecha de Ingreso: noviembre-2010
Ubicación: Capital Federal, Buenos Aires
Mensajes: 60
Antigüedad: 13 años, 4 meses
Puntos: 0
Respuesta: Resize Images

Estimado pateketrueke leí el manual, el problema es que no se como aplicarlo ya que creo tener mal ubicado cada uno de los eventos.- Mi código es:


Código PHP:
        if( !lenText($_POST['calle'], 11000) ){
            
$aErrores[] = "Falta escribir la Calle"
        }
        if( !
lenText($_POST['estado'], 315) ){
            
$aErrores[] = "Falta tildar el Estado"
        }
        if( !
lenText($_POST['tipodeoperacion'], 325) ){
            
$aErrores[] = "Falta tildar el tipo de Operacion"
        }
        if( !
lenText($_POST['cliente'], 1200) ){
            
$aErrores[] = "Faltan datos del Cliente";
        }
        if( !
$aErrores ){
        
//arranca el codigo
                                
$repo_dir "propiedades/casa";
                if( ! 
is_dir($repo_dir)){
                
mkdir$repo_dir );                    
                }
                
$user_dir $repo_dir."/".$aData['calle'];
                if( ! 
is_dir($user_dir)){
                
mkdir$user_dir );                    
                }
 
// armo un array con el name de cada archivo
    
$misImagenes = array( $_FILES['foto1'], $_FILES['foto2'], $_FILES['foto3'] );    
    
// aca esta el problema, si de uno de los name viene un campo vacio emite el error  del archivo resize que dice Not supported file

    
foreach( $misImagenes as $img ){
    if( 
$img ){

                
move_uploaded_file$img['tmp_name'], $user_dir.'/'.$img['name'] );


                    require_once( 
"resize.php" );
                    
                    
$thumb = new thumbnail$user_dir.'/'.$img['name'] );
                    
                    
$thumb->size_auto(320);
                    
                    
$thumb->save($user_dir.'/thumb_'.$img['name']);
                }
}    
// query para guardar el path en la base de datos
            
$foto1 $_FILES['foto1']['name'];
            
$foto2 $_FILES['foto2']['name'];

            
$query "UPDATE `sistema` SET
            
            `estado` = '$aData[estado]', 
            `tipodeoperacion` = '$aData[tipodeoperacion]',
            `subtipoinmueble` = '$aData[subtipoinmueble]',
            `barrio` = '$aData[barrio]',
            `calle` = '$aData[calle]',
            `cliente` = '$aData[cliente]',    
            `foto1` = '$foto1',
            `foto2` = '$foto2',
            `editadoporfecha` = '$diayhora'
            
            WHERE `id` = '$aData[id]'
            "

Intenté usar "count", "is_uploaded_file" y con ninguna logro que pase de ese error ¿Alguna idea?


Muchas gracias a todos por el tiempo!
  #8 (permalink)  
Antiguo 05/03/2011, 12:00
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Resize Images

pues quien sabe donde hayas leído, porque claramente hay ejemplos en el manual... incluso un enlace hacía la siguiente función...
Código PHP:
if (is_uploaded_file($_FILES['userfile']['tmp_name'])) {
   echo 
"File "$_FILES['userfile']['name'] ." uploaded successfully.\n";
   echo 
"Displaying contents\n";
   
readfile($_FILES['userfile']['tmp_name']);
} else {
   echo 
"Possible file upload attack: ";
   echo 
"filename '"$_FILES['userfile']['tmp_name'] . "'.";

ahora, si pones un poco de tu parte, y reflexionas con paciencia...
Código PHP:
if ( ! is_ploaded_file($img['tmp_name'])) die('no se subio el archivo?');

move_uploaded_file$img['tmp_name'], $user_dir.'/'.$img['name'] ); 
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #9 (permalink)  
Antiguo 05/03/2011, 12:18
 
Fecha de Ingreso: noviembre-2010
Ubicación: Capital Federal, Buenos Aires
Mensajes: 60
Antigüedad: 13 años, 4 meses
Puntos: 0
Respuesta: Resize Images

Lo que no comprendo es lo siguiente, yo en el código tengo: el siguiente orden:

Crea el directorio, hace un array con todos los valores completos o no completos de lo que venga por $_FILES, hace un foreach para mover cada archivo a la carpeta generada y ademas activa el archivo resize.php para que genere el thumb por cada uno, si uno de los campos file esta vacio emite el error que está adentro del archivo resize, es decir, que todos los campos file tienen que tener un valor, de que manera o ¿que debo hacer para que el resize entienda que si viene algo vacio lo debe "ignorar"?


Código PHP:
                                $repo_dir "propiedades/casa";
                if( ! 
is_dir($repo_dir)){
                
mkdir$repo_dir );                    
                }
                
$user_dir $repo_dir."/".$aData['calle'];
                if( ! 
is_dir($user_dir)){
                
mkdir$user_dir );                    
                }

    
$misImagenes = array( $_FILES['foto1'], $_FILES['foto2'], $_FILES['foto3'] );    
    

    foreach( 
$misImagenes as $img ){
    if( 
$img ){

                
move_uploaded_file$img['tmp_name'], $user_dir.'/'.$img['name'] );


                    require_once( 
"resize.php" );
                    
                    
$thumb = new thumbnail$user_dir.'/'.$img['name'] );
                    
                    
$thumb->size_auto(320);
                    
                    
$thumb->save($user_dir.'/thumb_'.$img['name']);
                }
}    
            
$foto1 $_FILES['foto1']['name'];
            
$foto2 $_FILES['foto2']['name'];

// hace el query 
¿Está mal el orden? Muchas gracias por la ayuda y el aguante!
  #10 (permalink)  
Antiguo 05/03/2011, 12:58
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Resize Images

entiende que el problema no está en el resize, lo que pasa es que ni siquiera compruebas que el archivo se ha subido con is_uploaded_file(), si esa función devuelve verdadero ya procedes a subir el archivo con move_uploaded_file() y finalmente aplicas el resize...

todo tiene un orden lógico, no entiendo porque no lo ves...
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #11 (permalink)  
Antiguo 05/03/2011, 13:07
 
Fecha de Ingreso: noviembre-2010
Ubicación: Capital Federal, Buenos Aires
Mensajes: 60
Antigüedad: 13 años, 4 meses
Puntos: 0
Respuesta: Resize Images

Ante todo gracias pateketrueke por la respuesta, te comento que utilizando is_uploaded_file() hace exactamente lo mismo, emite el error que esta dentro del archivo resize, mi nivel de php es principiante, lo mas probable es que me falten cosas ¿Es asi? ¿Como tendria que hacer?

Muchas gracias denuevo!


Código PHP:
        if( !$aErrores ){
        
                                
$repo_dir "propiedades/casa";
                if( ! 
is_dir($repo_dir)){
                
mkdir$repo_dir );                    
                }
                
$user_dir $repo_dir."/".$aData['calle'];
                if( ! 
is_dir($user_dir)){
                
mkdir$user_dir );                    
                }

    
$misImagenes = array( $_FILES['foto1'], $_FILES['foto2'], $_FILES['foto3'] );    
    

    foreach( 
$misImagenes as $img ){
    if( 
$img ){

                if ( ! 
is_uploaded_file($img['tmp_name'])){
                
                
move_uploaded_file$img['tmp_name'], $user_dir.'/'.$img['name'] );


                    require_once( 
"resize.php" );
                    
                    
$thumb = new thumbnail$user_dir.'/'.$img['name'] );
                    
                    
$thumb->size_auto(320);
                    
                    
$thumb->save($user_dir.'/thumb_'.$img['name']);
                }
                }
}    
            
$foto1 $_FILES['foto1']['name'];
            
$foto2 $_FILES['foto2']['name'];

            
$query "UPDATE `sistema` SET
            
            `estado` = '$aData[estado]', 
            `tipodeoperacion` = '$aData[tipodeoperacion]',
            `subtipoinmueble` = '$aData[subtipoinmueble]',
            `barrio` = '$aData[barrio]',
            `calle` = '$aData[calle]',
            `cliente` = '$aData[cliente]',    
            `foto1` = '$foto1',
            `foto2` = '$foto2',
            `editadoporfecha` = '$diayhora'
            
            WHERE `id` = '$aData[id]'
            "

            
$insertOK do_query($query); 
  #12 (permalink)  
Antiguo 05/03/2011, 13:21
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Resize Images

nota bien la expresión de tu comparación...
Código PHP:
if ( ! is_uploaded_file($img['tmp_name'])){ 
ahí significaría algo así como "si no se ha subido el archivo..."

ahora, ¿eso te parece congruente? ¿esa es la lógica que esperas?

entiende que programar no solo es escribir código, también hay que pensar bien las cosas... pues si no tiene sentido lo que piensas, menos tiene lo que haces...
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #13 (permalink)  
Antiguo 05/03/2011, 13:23
 
Fecha de Ingreso: noviembre-2010
Ubicación: Capital Federal, Buenos Aires
Mensajes: 60
Antigüedad: 13 años, 4 meses
Puntos: 0
Respuesta: Resize Images

Pateketrueke gracias por la respuesta.-

Etiquetas: images, resize
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:48.