Foros del Web » Programando para Internet » PHP »

Redimensionar fotos en tmp o después?

Estas en el tema de Redimensionar fotos en tmp o después? en el foro de PHP en Foros del Web. Sé que han preguntado esto millones de veces y que siempre con una amabilidad enorme los "mandan" a buscar resultados. Pero, en casi la mayoria ...
  #1 (permalink)  
Antiguo 09/02/2009, 15:14
Avatar de SCY-FOX  
Fecha de Ingreso: septiembre-2007
Ubicación: Chile
Mensajes: 139
Antigüedad: 16 años, 7 meses
Puntos: 5
SOLUCIONADO - Redimensionar fotos en tmp o después?

Sé que han preguntado esto millones de veces y que siempre con una amabilidad enorme los "mandan" a buscar resultados.

Pero, en casi la mayoria de los tutoriales de redimensionamiento de imagenes, hacen uso de una pagina aparte para que mediante una variable identificadora, se achique una foto grande "on the fly".

Sucede que tengo un formulario que carga el path en la bd y luego sube el archivo.
Funciona perfecto, el problema es que no se donde se coloca el código de redimensionamiento.

Antes del "move_uploaded_file" o después??

uso el path temporal o el path final???

Esop.


Muchas gracias de antemano.

Última edición por SCY-FOX; 12/02/2009 a las 16:01 Razón: SOLUCIONADO
  #2 (permalink)  
Antiguo 09/02/2009, 16:09
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Redimensionar fotos en tmp o después?

pienso, que lo ideal es hacerlo en su forma genuina, osea, con el archivo temporal...

de esta forma, terminas guardando la versión final de la imagen, me parece sencillo...


suerte!
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 12/02/2009, 10:11
Avatar de SCY-FOX  
Fecha de Ingreso: septiembre-2007
Ubicación: Chile
Mensajes: 139
Antigüedad: 16 años, 7 meses
Puntos: 5
Respuesta: Redimensionar fotos en tmp o después?

Saludos.

Este es mi código de Upload de archivos. Tiene validador de tamaño y llenado.
Podrían decirme en que parte tengo que hacer la redimension???

Código PHP:
<?php
    
if (isset($_GET['id_cat']))
    {
        
$id_cat    =    $_GET['id_cat'];    
    }

    
$datos_categoria mostrar_categoria_id($id_cat); (esta funcion escupe el "select * from y bla bla bla")
    
$resultado mysql_query($datos_categoria);
    
    if (
$valor mysql_fetch_array($resultado))
    {
        
$id_cat                    =    $valor[0];
        
$titulo_cat            $valor[1];
        
$detalle_cat        =    $valor[2];
        
$path_thumb_cat    =    $valor[4];
        
$orden_cat            =    $valor[5];
    }
    
    
$datos_fotos    =    mostrar_fotosporcat($valor[0]);
    
$resfotos            =    mysql_query($datos_fotos);
        
    if (isset(
$_POST['add_foto']))
    {
        
//Inicializar variables
        
$id_cat "";
        
$n_foto1    =    "";
            
        
$id_cat    =    $_POST['id_cat'];
        
    
//Recibo Ficheros - Foto Thumb

    
$n_foto1            =    $_FILES['foto1']['name'];
    
$n_foto1_tmp    =    $_FILES['foto1']['tmp_name'];
    
$n_foto1_size    =    $_FILES['foto1']['size'];
    
$n_foto1_type    =    $_FILES['foto1']['type'];
    
    
//DEBUG VARIABLES Y FUNCIONAMIENTO GENERAL
    /*
    echo $id_cat."<br />";
        
    echo $n_foto1."<br />";
    echo $n_foto1_tmp."<br />";
    echo $n_foto1_size."<br />";
    echo $n_foto1_type."<br />";
    */

    
    //Si el alto máximo es superado, se detiene la carga y welta patrá! xDD
    
list($ancho$altura$tipo1$atr1) = getimagesize($n_foto1_tmp);
    
    if (
$altura 393)
     {
         echo 
"<script>alert('El alto maximo es 393px. Favor redimensionar o ingresar otro archivo');</script>";
        echo 
"<script type=\"text/javascript\">window.location ='javascript:history.go(-1)';</script>";
        die();
     }
     
if (
$n_foto1 == ''//SIN FOTO
    

        
$n_foto1         ""
        
$sin_foto1         "TRUE"
         echo 
"<script>alert('No ha seleccionado ninguna imagen o el formato de imagen es incorrecto.');</script>";
        echo 
"<script type=\"text/javascript\">window.location = 'javascript:history.go(-1)';</script>";
        die();
                        
    } else if (
$n_foto1 != '')// CON FOTO
            

            
$n_foto1         renombrar($n_foto1);    
            
$sin_foto1         "FALSE";
            }
            
//Funciones de Carga al Servidor
$upload_dir    "http://www.forosdelweb.com/images/grandes/";

//Mover direccion temporal de FOTO 1 a DIRECCION FINAL en images/noticias/chicas
if ($sin_foto1 != "TRUE")
{
    
$n_path_foto1        =    $upload_dir $n_foto1;    
    
$resultado1        =    move_uploaded_file($n_foto1_tmp$n_path_foto1);

    if (!
$resultado1)
        {
            echo 
'Error, La consulta falló luego de subir archivo : '.mysql_error();
            exit;
            die();
        }
}

//***********************************************************
//Aca deben incluirse los datos de conexion de base de datos.
//***********************************************************

    
if (!get_magic_quotes_gpc())
    {    
        
$n_foto1        =    addslashes($n_foto1);
        
        
$n_path_foto1        =    addslashes($n_path_foto1);
    }
    
    
$sql="INSERT INTO tabla (id_cat, nom_foto, path_foto, orden_foto)
                                            VALUES ('"
.$id_cat."',
                                                            '"
.$n_foto1."',
                                                            '"
.$n_path_foto1."', '1')";
    

    
//echo $sql;
    
$resultado_add mysql_query($sql);
    
    if (!
$resultado_add)
    {
        echo 
'Error, La consulta falló tratando de ingresar a bd : '.mysql_error();
    }
     else {
             echo 
"<script>alert('Imagen agregada correctamente.');</script>";
             echo 
"<script>window.location = 'admin.php?op=catfotos_add&id_cat=".$id_cat."'; </script>";
                 }

}
    

?>

Última edición por SCY-FOX; 12/02/2009 a las 10:13 Razón: vole el nombre de la tabla
  #4 (permalink)  
Antiguo 12/02/2009, 11:32
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Redimensionar fotos en tmp o después?

antes de moverla... osea, antes del move_uploaded_file()
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 12/02/2009, 14:48
Avatar de SCY-FOX  
Fecha de Ingreso: septiembre-2007
Ubicación: Chile
Mensajes: 139
Antigüedad: 16 años, 7 meses
Puntos: 5
Respuesta: Redimensionar fotos en tmp o después?

Ahhh ctm... toy desesperado. No se donde está el error. Le he puesto valores a mano y sigue sin funcionar.

Código PHP:
<?php
    
if (isset($_GET['id_cat']))
    {
        
$id_cat    =    $_GET['id_cat'];    
    }

    
$datos_categoria mostrar_categoria_id($id_cat);
    
$resultado mysql_query($datos_categoria);
    
    if (
$valor mysql_fetch_array($resultado))
    {
        
$id_cat                    =    $valor[0];
        
$titulo_cat            $valor[1];
        
$detalle_cat        =    $valor[2];
        
$path_thumb_cat    =    $valor[4];
        
$orden_cat            =    $valor[5];
    }
    
    
$datos_fotos    =    mostrar_fotosporcat($valor[0]);
    
$resfotos            =    mysql_query($datos_fotos);
        
    if (isset(
$_POST['add_foto']))
    {
        
//Inicializar variables
        
$id_cat "";
        
$n_foto1    =    "";
            
        
$id_cat    =    $_POST['id_cat'];
        
    
//Recibo Ficheros - Foto Thumb

    
$n_foto1            =    $_FILES['foto1']['name'];
    
$n_foto1_tmp    =    $_FILES['foto1']['tmp_name'];
    
$n_foto1_size    =    $_FILES['foto1']['size'];
    
$n_foto1_type    =    $_FILES['foto1']['type'];
    
    
//DEBUG VARIABLES Y FUNCIONAMIENTO GENERAL
    
    
echo $id_cat."<br />";
        
    echo 
$n_foto1."<br />";
    echo 
$n_foto1_tmp."<br />";
    echo 
$n_foto1_size."<br />";
    echo 
$n_foto1_type."<br />";
    
    
    
//Si el alto máximo es superado, se detiene la carga y welta patrá! xDD
    
list($ancho_original$alto_original$tipo_original$alternativo) = getimagesize($n_foto1_tmp);
    
    if (
$alto_original 393)
     {
         echo 
"<script>alert('El alto maximo es 393px. La imagen va a ser redimensionada.');</script>";
    
    
    
/********************************************************/
    
    /*  PRIMERAS PRUEBAS DE REDIMENSIONAMIENTO   */
    
    
echo "Ancho Original: " .$ancho_original."<br />";
    echo 
"Alto Original: "  .$alto_original."<br />";
    echo 
"Tipo de Foto: " .$tipo_original."<br />";
    
    
//ALTO MAXIMO
    
$alto_final    =    393;

    
//DIRECTORIO DONDE CAERAN LAS IMAGENES REDIMENSIONADAS
    //$directorio = 'images/grandes';
    
    //SI IMAGEN CARGADA ES GIF    
    
if($tipo    ==    1){$img    =    imagecreatefromgif($n_foto1);}
    
    
//SI IMAGEN CARGADA ES JPG/JPEG/PJPEG
    
if($tipo    ==    ) { $img    =    imagecreatefromjpeg($n_foto1);}
    
    
//SI IMAGEN CARGADA ES PNG
    
if($tipo    ==    3){$img    =    imagecreatefrompng($n_foto1);}
    
    
//CALCULO DE RANGOS PARA HACER REDIMENSIONADO SIN AFECTAR LA PROPORCION
    
    
echo $img;
    
    if (
$alto_original $alto_final)
    {
        
$ancho_final "";
        
$ancho_final    =    $ancho_original $alto_final/$alto_original;
    }
    
    echo 
$ancho_final."<br />";
    echo 
$alto_final."<br />";
    
//die();
    
    //CREACIÓN DE NUEVO LIENZO DONDE SE SE PEGARÁ EL CACHE DE CREACIÓN DE IMAGECREATEFROM-TYPE
    
$thumb imagecreatetruecolor($ancho_final,$alto_final);
    
    
//PEGA EL CACHE DE CREACIÓN AL LIENZO RECIÉN CREADO.
    //LIENZO, CACHE, X LIENZO, Y LIENZO, X CACHE, Y CACHE, ANCHO FINAL,ALTO FINAL, ANCHO ORIGINAL, ALTO ORIGINAL.
    
imagecopyresampled($thumb$img0000$ancho_final$alto_finalimagesx($n_foto1_tmp), imagesy($n_foto1_tmp));
    
    if (
$tipo == 1)
        {
            
imagegif($thumb$n_foto1_tmp);
        }

    if (
$tipo == 2)
        {    
            
imagejpeg($thumb$n_foto1_tmp100);
        }
    
    if (
$tipo == 3)
        {
            
imagepng($thumb$n_foto1_tmp);
        }
 }
    
//Eliminamos archivo temporal
    //unlink($nombre);
    
    //LIMPIAMOS EL CACHE DE CREACIÓN USADO POR IMAGECREATEFROM-TIPO
     //imagedestroy ($img);
     
if ($n_foto1 == ''//SIN FOTO
    

        
$n_foto1         ""
        
$sin_foto1         "TRUE"
         echo 
"<script>alert('No ha seleccionado ninguna imagen o el formato de imagen es incorrecto.');</script>";
        echo 
"<script type=\"text/javascript\">window.location = 'javascript:history.go(-1)';</script>";
        die();
                        
    } else if (
$n_foto1 != '')// CON FOTO
            

            
$n_foto1         renombrar($n_foto1);    
            
$sin_foto1         "FALSE";
            }
            
//Funciones de Carga al Servidor
$upload_dir    "http://www.forosdelweb.com/images/grandes/";

//Mover direccion temporal de FOTO 1 a DIRECCION FINAL en images/noticias/chicas
if ($sin_foto1 != "TRUE")
{
    
$n_path_foto1        =    $upload_dir $n_foto1;    
    
$resultado1        =    move_uploaded_file($n_foto1_tmp$n_path_foto1);

    if (!
$resultado1)
        {
            echo 
'Error, La consulta falló luego de subir archivo : '.mysql_error();
            exit;
            die();
        }
}

//***********************************************************
//Aca deben incluirse los datos de conexion de base de datos.
//***********************************************************

    
if (!get_magic_quotes_gpc())
    {    
        
$n_foto1        =    addslashes($n_foto1);
        
        
$n_path_foto1        =    addslashes($n_path_foto1);
    }
    
    
$sql="INSERT INTO tabla (id_cat, nom_foto, path_foto, orden_foto)
                                            VALUES ('"
.$id_cat."',
                                                            '"
.$n_foto1."',
                                                            '"
.$n_path_foto1."', '1')";
    

    
//echo $sql;
    
$resultado_add mysql_query($sql);
    
    if (!
$resultado_add)
    {
        echo 
'Error, La consulta falló tratando de ingresar a bd : '.mysql_error();
    }
     else {
             echo 
"<script>alert('Imagen agregada correctamente.');</script>";
             
//echo "<script>window.location = 'admin.php?op=catfotos_add&id_cat=".$id_cat."'; </script>";
                 
}

}
    

?>
Me dice un error:
Código:
Warning: imagesx(): supplied argument is not a valid Image resource in C:\Archivos de programa\xampp\xampp\htdocs\puntop\admin\seccion\admin_catfotos_add2.php on line 97

Warning: imagesy(): supplied argument is not a valid Image resource in C:\Archivos de programa\xampp\xampp\htdocs\puntop\admin\seccion\admin_catfotos_add2.php on line 97

Warning: imagecopyresampled(): supplied argument is not a valid Image resource in C:\Archivos de programa\xampp\xampp\htdocs\puntop\admin\seccion\admin_catfotos_add2.php on line 97
Y la linea 97 es:
Código:
	imagecopyresampled($thumb, $img, 0, 0, 0, 0, $ancho_final, $alto_final, imagesx($n_foto1_tmp), imagesy($n_foto1_tmp));
Por favor, alguna ayuda!!!
  #6 (permalink)  
Antiguo 12/02/2009, 15:57
Avatar de SCY-FOX  
Fecha de Ingreso: septiembre-2007
Ubicación: Chile
Mensajes: 139
Antigüedad: 16 años, 7 meses
Puntos: 5
De acuerdo Respuesta: Redimensionar fotos en tmp o después?

¡SOLUCIONADO!

Código PHP:
    if (isset($_GET['id_cat']))
    {
        
$id_cat    =    $_GET['id_cat'];    
    }

    
$datos_categoria mostrar_categoria_id($id_cat);/Consulta SQL en otro fichero
    $resultado 
mysql_query($datos_categoria);
    
    if (
$valor mysql_fetch_array($resultado))
    {
        
$id_cat                    =    $valor[0];
        
$titulo_cat            $valor[1];
        
$detalle_cat        =    $valor[2];
        
$path_thumb_cat    =    $valor[4];
        
$orden_cat            =    $valor[5];
    }
    
    
$datos_fotos    =    mostrar_fotosporcat($valor[0]);//Consulta SQL en otro fichero
    
$resfotos            =    mysql_query($datos_fotos);
        
    if (isset(
$_POST['add_foto']))
    {
        
//Inicializar variables
        
$id_cat "";
        
$n_foto1    =    "";
            
        
$id_cat    =    $_POST['id_cat'];
        
    
//Recibo Ficheros - Foto Thumb

    
$n_foto1            =    $_FILES['foto1']['name'];
    
$n_foto1_tmp    =    $_FILES['foto1']['tmp_name'];
    
$n_foto1_size    =    $_FILES['foto1']['size'];
    
$n_foto1_type    =    $_FILES['foto1']['type'];
    
    
//DEBUG VARIABLES Y FUNCIONAMIENTO GENERAL
    /*
    echo $id_cat."<br />";
        
    echo $n_foto1."<br />";
    echo $n_foto1_tmp."<br />";
    echo $n_foto1_size."<br />";
    echo $n_foto1_type."<br />";*/
    
    //Si el alto máximo es superado, se detiene la carga y welta patrá! xDD
    
list($ancho_original$alto_original$tipo_original$alternativo) = getimagesize($n_foto1_tmp);
    
    if (
$alto_original 393)
     {
         echo 
"<script>alert('El alto maximo es 393px. La imagen va a ser redimensionada.');</script>";
    
    
    
/********************************************************/
    
    /*  PRIMERAS PRUEBAS DE REDIMENSIONAMIENTO   */
    
    /*echo "Ancho Original: " .$ancho_original."<br />";
    echo "Alto Original: "  .$alto_original."<br />";
    echo "Tipo de Foto: " .$tipo_original."<br />";
    */
    //ALTO MAXIMO
    
$alto_final    =    369;

    
//DIRECTORIO DONDE CAERAN LAS IMAGENES REDIMENSIONADAS
    //$directorio = 'images/grandes';
    
    //SI IMAGEN CARGADA ES GIF    
    
if($n_foto1_type    ==    "image/gif"){$img    =    imagecreatefromgif($n_foto1_tmp);}
    
    
//SI IMAGEN CARGADA ES JPG/JPEG/PJPEG
    
if ($n_foto1_type == "image/jpeg" || $n_foto1_type == "image/pjpeg"){ $img    =    imagecreatefromjpeg($n_foto1_tmp);}
    
    
//SI IMAGEN CARGADA ES PNG
    
if($n_foto1_type    ==    "image/png"){$img    =    imagecreatefrompng($n_foto1_tmp);}
    
    
//CALCULO DE RANGOS PARA HACER REDIMENSIONADO SIN AFECTAR LA PROPORCION
    
    
echo $img;
    
    if (
$alto_original $alto_final)
    {
        
$ancho_final "";
        
$ancho_final    =    $ancho_original $alto_final/$alto_original;
    }
    
    echo 
$ancho_final."<br />";
    echo 
$alto_final."<br />";
    
//die();
    
    //CREACIÓN DE NUEVO LIENZO DONDE SE SE PEGARÁ EL CACHE DE CREACIÓN DE IMAGECREATEFROM-TYPE
    
$thumb imagecreatetruecolor($ancho_final,$alto_final);
    
    
//PEGA EL CACHE DE CREACIÓN AL LIENZO RECIÉN CREADO.
    //LIENZO, CACHE, X LIENZO, Y LIENZO, X CACHE, Y CACHE, ANCHO FINAL,ALTO FINAL, ANCHO ORIGINAL, ALTO ORIGINAL.
    
imagecopyresampled($thumb$img0000$ancho_final$alto_final$ancho_original$alto_original);
    
    if (
$n_foto1_type    ==    "image/gif")
        {
            
imagegif($thumb$n_foto1_tmp);
        }

    if (
$_FILES['foto1']['type'] == "image/jpeg" || $_FILES['foto1']['type'] == "image/pjpeg")
        {    
            
imagejpeg($thumb$n_foto1_tmp100);
        }
    
    if (
$n_foto1_type    ==    "image/png")
        {
            
imagepng($thumb$n_foto1_tmp);
        }
 }

     
if (
$n_foto1 == ''//SIN FOTO
    

        
$n_foto1         ""
        
$sin_foto1         "TRUE"
         echo 
"<script>alert('No ha seleccionado ninguna imagen o el formato de imagen es incorrecto.');</script>";
        echo 
"<script type=\"text/javascript\">window.location = 'javascript:history.go(-1)';</script>";
        die();
                        
    } else if (
$n_foto1 != '')// CON FOTO
            

            
$n_foto1         renombrar($n_foto1);    
            
$sin_foto1         "FALSE";
            }
            
//Funciones de Carga al Servidor
$upload_dir    "http://www.forosdelweb.com/images/grandes/";

//Mover direccion temporal de FOTO 1 a DIRECCION FINAL en images/noticias/chicas
if ($sin_foto1 != "TRUE")
{
    
$n_path_foto1        =    $upload_dir $n_foto1;    
    
$resultado1        =    move_uploaded_file($n_foto1_tmp$n_path_foto1);

    if (!
$resultado1)
        {
            echo 
'Error, La consulta falló luego de subir archivo : '.mysql_error();
            exit;
            die();
        }
}

//***********************************************************
//Aca deben incluirse los datos de ingreso a la base de datos.
//***********************************************************

    
if (!get_magic_quotes_gpc())
    {    
        
$n_foto1        =    addslashes($n_foto1);
        
        
$n_path_foto1        =    addslashes($n_path_foto1);
    }
    
    
$sql="INSERT INTO tabla (id_cat, nom_foto, path_foto, orden_foto)
                                            VALUES ('"
.$id_cat."',
                                                            '"
.$n_foto1."',
                                                            '"
.$n_path_foto1."', '1')";
    

    
//echo $sql;
    
$resultado_add mysql_query($sql);
    
    if (!
$resultado_add)
    {
        echo 
'Error, La consulta falló tratando de ingresar a bd : '.mysql_error();
    }
     else {
             echo 
"<script>alert('Imagen agregada correctamente.');</script>";
             
//echo "<script>window.location = 'admin.php?op=catfotos_add&id_cat=".$id_cat."'; </script>";
                 
}


La solucion al error o warning:
Código:
Warning: imagecopyresampled(): supplied argument is not a valid Image resource in...
Por alguna razón, no me tomaba el valor del tipo de imagen al hacer este comando:

Código PHP:
list($ancho_original$alto_original$tipo_original$alternativo) = getimagesize($n_foto1_tmp); 
Los valores de tipo_original salen como 1,2,3. Mientras que $_FILES['foto']['type']; te responde con image/gif, image/jpeg o image/pjpeg, y image/png

Con estos ultimos valores es posible que la wea funcione.

Valida que subas o no imagenes, para formularios donde la imagen sea opcional. El alto máximo se puede cambiar, y como comente casi todas las lineas de código, puede cambiarse para redimensionar segun el ancho en vez de por el alto.

Muchas gracias por todos los tips.!!

Silla!
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 20:11.