Foros del Web » Programando para Internet » PHP »

reducir tamaño urgentee !

Estas en el tema de reducir tamaño urgentee ! en el foro de PHP en Foros del Web. Tengo el siguiente caso : Un upload de imagenes que sube la imagen a un directorio y aparte graba en una tabla el path , ...
  #1 (permalink)  
Antiguo 30/08/2004, 12:49
 
Fecha de Ingreso: noviembre-2003
Ubicación: mar del plata
Mensajes: 107
Antigüedad: 20 años, 4 meses
Puntos: 0
Mensaje reducir tamaño urgentee !

Tengo el siguiente caso :

Un upload de imagenes que sube la imagen a un directorio y aparte graba en una tabla el path , el id_foto y el id_auto (es el auto con la foto asignada)

el codigo de upload es el siguiente

archivo : fotos.php

Código PHP:
    
    
include ("fotos2.php"); 
    include (
"libreria_foto.php"); 
    
    
            if(
$nombre<>''){

                                                   
//llama al formulario que se encuentra
                                                   // en la libreria_foto
        
                
formulario_foto($nombre);
            
            } 
archivo : fotos2.php aca tengo el formulario

Código HTML:

<form method="post" enctype="multipart/form-data" action="enviar.php">
	<table width="50%" style="margin: auto;">
		<tr>
			<td colspan="2" style="width: 100%;"><b><?=$msg?></b></td>
		</tr>
		<tr class="genava">
			<td style="width: 45%;">NOMRE DEL ARCHIVO </td>
			<td style="width: 55%;"><input name="archivo" type="file" class="genava" size="20" /></td>
	  </tr>
		<tr class="genava">
			<td style="width: 45%;">&nbsp;</td>
			<td style="width: 55%;"><input type="submit" value="Enviar!" /></td>
	  </tr>
  </table>
</form> 

archivo enviar.php

Código PHP:

include("config.php");    

# Si la carpeta no existe la creamos y le aplicamos los permisos.
if(!file_exists($carpeta_archivos))
{
    
mkdir($carpeta_archivos);
    @
chmod($carpeta_archivos0777);
}

# Verificamos que este setiado el archivo.
if($_FILES['archivo'])
{
    
# Verificamos que su tamaño sea mejor que los bytes que as puesto en la configuración.
    
if((1000 $bytes_max) > $_FILES['archivo']['size'])
    {
        
# Seteamos las variables para mejor facilidad
        
$tmp $_FILES['archivo']['tmp_name'];
        
$name $_FILES['archivo']['name'];
        
$ahora $carpeta_archivos.'/'.$name;
        
        
        
# Movemos el archivo a la carpeta
        
move_uploaded_file($tmp$ahora);
        
        
# paso el nombre de la imagen para que la guarde en la tabla de la DB
        
header("Location: fotos.php?nombre=$name");
    }
    else
        
header("Location: index.php?errno=1&errmsg=Su archivo excede los ".$bytes_max."bytes.");
}
else
    
header("Location: index.php?errno=1&errmsg=No ah seleccionado ningun archivo."); 
archivo : libreria_foto.php

Código PHP:

require("link.php");
    
    function 
formulario_foto($nombre){
    
    global 
$ok_foto,$link,$id_auto,$id_foto,$base,$principal;
        
    
    if(
$ok_foto){
    
            if(
$link){
            
                if((
$id_foto<>'') AND ($id_auto<>'') AND ($nombre<>'')){                        
            
                    
$query="SELECT * from fotos WHERE id_foto = $id_foto";
                    
$result=mysql_db_query($base,$query,$link);
                    
                    
$row=mysql_fetch_row($result);                    
                    
                    if(
$row<>0){                    
                        
                        echo
'EL ID SE ENCUENTRA UTILIZADO EN EL SISTEMA. INTENTE CON OTRO';
                    
                    } else {
                    
                        
//SI ELIGO QUE SEA LA FOTO PRINCIPAL
                    
                        
if($principal==1){                        
                                            
$up="UPDATE autos SET id_foto=$id_foto WHERE id_auto=$id_auto";
                                            
                                            if(
mysql_db_query($base,$up,$link)){
                                            echo 
'';
                                            } else {
                                            
                                            echo 
'no se pudo generar como principal';
                                                                                        
                                            }                                                                
                        }
                        
                        
//FIN PRINCIPAL
                    
                        
$query="INSERT INTO fotos values ('$id_foto','$id_auto','$nombre')";
                        
                        if(
mysql_db_query ($base,$query,$link)){
                                        
                        echo 
'LA FOTO se ingresó exitosamente';                        
                        
                        
                        }            
                    
                    }
                    
                } else {
                
                    echo
'faltan datos';
                
                }            
            }    else {
            
                echo
'problemas de conexion';
            }
    } 
aca esta el formulario de libreria_foto.php

Código HTML:
<form name="form1" method="post" action="">
        <table width="338" border="0" align="center" cellpadding="0" cellspacing="0">
          <tr class="genava">
            <td width="142">ID FOTO: </td>
            <td width="196"><input name="id_foto" type="text" id="id_foto"></td>
          </tr>
          <tr class="genava">
            <td>ID AUTO: </td>
            <td><input name="id_auto" type="text" id="id_auto"></td>
          </tr>
          <tr class="genava">
            <td>ARCHIVO:</td>
            <td><input name="path" type="text" id="path" value="<? print("$nombre"); ?>"></td>
          </tr>
          <tr class="genava">
            <td>&nbsp;</td>
            <td>agregar como foto principal?
            <input name="principal" type="checkbox" id="principal" value="1"></td>
          </tr>
          <tr class="genava">
            <td>&nbsp;</td>
            <td><input type="submit" name="Submit" value="agregar foto a auto">
            <input name="ok_foto" type="hidden" id="ok_foto" value="true"></td>
          </tr>
        </table>
      </form> 
LO QUE NECESITO ES LO SIGUIENTE : Cuando se envie la imagen , la guarde con una resolucion menor (con menos peso) para usarla como thumbnail.

Esto funciona perfectamente pero necesito que ocupe menos , ese es el principal problema .

Alguien me puede ayudar a reducir el tamaño en este codigo ?¿

muchas gracias .
__________________
Ale

Última edición por ale21ale; 30/08/2004 a las 12:55
  #2 (permalink)  
Antiguo 30/08/2004, 13:29
Avatar de José Molina  
Fecha de Ingreso: enero-2002
Ubicación: USA
Mensajes: 768
Antigüedad: 22 años, 3 meses
Puntos: 1
Saludos.

La librería GD te puede ayudar, a cambiar el tamaño (pixeles) de las imagenes, pero no creo que a bajar la resolución.

De todas formas si bajas el tamaño se baja la resolución, pro no se si te funcionaría así.

Suerte
__________________
José Molina
La marginalidad no esta en la incapacidad de calmar el hambre de un estómago sino en la incapacidad de calmar el hambre de la mente.
  #3 (permalink)  
Antiguo 30/08/2004, 13:33
 
Fecha de Ingreso: noviembre-2003
Ubicación: mar del plata
Mensajes: 107
Antigüedad: 20 años, 4 meses
Puntos: 0
pero sinceramente no se como hacer para que modifique el tamaño antes de subirla . Me la sube perfectamente , pero si tengo que cargar 80 fotos tienen que tener menor tamaño !! =) .

Si a alguien se le ocurre algo por favor ayudaaaaa jaja

es verdaderamente urgente !

gracias.
__________________
Ale
  #4 (permalink)  
Antiguo 30/08/2004, 13:45
 
Fecha de Ingreso: noviembre-2003
Ubicación: mar del plata
Mensajes: 107
Antigüedad: 20 años, 4 meses
Puntos: 0
Lo que no se es :

Si tengo que reducir el tamaño de la imagen antes de mandarla .. o sea trabajar con la ubicacion de la imagen original en mi disco y despues enviarla .. o si tengo que enviarla y despues aplicar una funcion rezize (...) despues de mandarla ..

estoy en problemas .
__________________
Ale
  #5 (permalink)  
Antiguo 30/08/2004, 13:49
Avatar de José Molina  
Fecha de Ingreso: enero-2002
Ubicación: USA
Mensajes: 768
Antigüedad: 22 años, 3 meses
Puntos: 1
Utiliza esto

Esta función la consegui aquí mismo, así que no me voy a robar los créditos jejejeje

crea un archivo php con esta función:

Código PHP:
function resizeImg($s_img$d_img$w_max$h_max
    { 
        
// Guarda los posibles tipos de imagenes en un array ($img_types) 
        
static $img_types = array( 
            
=> 'Gif'
            
=> 'Jpeg'
            
=> 'Png' 
        
); 
          
        if (
file_exists($s_img)) 
        { 
            
// Obtiene el tipo del fichero 
            
list(,,$type) = getImageSize($s_img); 
              
            
// No se reconoce el tipo del fichero 
            
if (!isset($img_types[$type])) { 
                
trigger_error('No se reconoce el tipo de imagen'E_USER_WARNING); 
                return 
false
            } 
              
            
// Se define función que creará la imagen y se comprueba que exista 
            
if (!function_exists($f_create 'imageCreateFrom' $img_types[$type])) { 
                
trigger_error("No existe la función '{$f_create}' necesaria para abrir la imagen."E_USER_WARNING); 
                return 
false
            } 
              
            
// Crea la imagen a partir del fichero y comprueba que se haya cargado bien 
            
if (!$img $f_create($s_img)) { 
                
trigger_error("No se pudo abrir el fichero correctamente."E_USER_WARNING); 
                return 
false
            } 

            
// Obtiene el tamaño de la imagen original 
            
list($aw$ah) = array(imageSX($img), imageSY($img)); 
              
            
// Si el ancho o el alto de la imagen es menor o igual a 0 
            
if ($aw <= || $ah <= 0) { 
                
trigger_error("El tamaño de la imagen es incorrecto."E_USER_WARNING); 
                return 
false
            } 
              
            
// Se calcula la proporción de la imagen 
            
if ($aw $ah) { 
                
$nw $w_max
                
$nh = ($nw $aw) * $ah
            } else { 
                
$nh $h_max
                
$nw = ($nh $ah) * $aw
            } 

            
// Si se puede crear la imagen a color verdadero se crea 
            
if (function_exists('imageCreateTrueColor')) { 
                
$img2 imageCreateTrueColor($nw$nh); 
            } else { 
                if (
function_exists('imageCreate')) { 
                    
trigger_error("No existe la función 'imageCreate', no se puede crear la imagen."E_USER_WARNING); 
                    return 
false
                } 
                  
                
$img2 imageCreate($nw$nh); 
            } 
              
            if (!
$img2) { 
                
trigger_error("No se pudo crear la imagen correctamente."E_USER_WARNING); 
                return 
false
            } 

            
// Se intenta usar imageCopyResampled 
            
if (function_exists('imageCopyResampled')) { 
                
imageCopyResampled($img2$img0000$nw$nh$aw$ah); 
            } else { 
                if (
function_exists('imageCopyResized')) { 
                    
trigger_error("No existe la función 'imageCopyResized', no se puede redimensionar la imagen."E_USER_WARNING); 
                    return 
false
                } 
                  
                
imageCopyResized($img2$img0000$nw$nh$aw$ah); 
            } 

            
// Se comprueba que exista la función para guardar la imagen, en caso 
            // contrario se prueban otros formatos. 
            
foreach(array($img_types[$type], 'Jpeg''Png') as $type_t) { 
                if (
function_exists($f_save 'image' $type_t)) { 
                    
// Se guarda la imagen
                    
                    
if ($f_save($img2$d_img)) return true;     
                    
                }                  
            } 
              
            
trigger_error("No se pudo guardar la imagen en '{$d_img}'."E_USER_WARNING); 
            return 
false
        } 

        
trigger_error("No existe el fichero '{$s_img}'."E_USER_WARNING); 
        return 
false
    } 
Y cuando subas la fotografía y le cambies el CHMOD a 777, entonces le aplicas esta función de la siguiente manera:

Código PHP:
resizeImg($nombrefoto$rutafisicafoto$tamaoancho$tamanoalto) ; 
Si la función la colocas como un include fuera de la carpeta donde estan las imagenes, entonces $nombrefoto = $rutafisicafoto

Suerte
__________________
José Molina
La marginalidad no esta en la incapacidad de calmar el hambre de un estómago sino en la incapacidad de calmar el hambre de la mente.
  #6 (permalink)  
Antiguo 30/08/2004, 14:09
 
Fecha de Ingreso: noviembre-2003
Ubicación: mar del plata
Mensajes: 107
Antigüedad: 20 años, 4 meses
Puntos: 0
JOSE !! gracias por ayudarme ! sos un capo .

estoy fijandome si funciona ...

de todas maneras gracias por tu tiempo
__________________
Ale
  #7 (permalink)  
Antiguo 30/08/2004, 14:20
 
Fecha de Ingreso: noviembre-2003
Ubicación: mar del plata
Mensajes: 107
Antigüedad: 20 años, 4 meses
Puntos: 0
me dice el siguiente error:

Warning: imagecreatetruecolor(): Invalid image dimensions in /home/ale/public_html/imagenes/index.php on line 54

Warning: No se pudo crear la imagen correctamente. in /home/ale/public_html/imagenes/index.php on line 65
__________________
Ale
  #8 (permalink)  
Antiguo 30/08/2004, 14:21
 
Fecha de Ingreso: noviembre-2003
Ubicación: mar del plata
Mensajes: 107
Antigüedad: 20 años, 4 meses
Puntos: 0
Yo hice lo siguiente :

$nombrefoto = 'foto.jpg';
$rutafisicafoto = 'foto.jpg';
$tamanoancho = '600';
$tamanoalto = '454';

resizeImg($nombrefoto, $rutafisicafoto, $tamaoancho, $tamanoalto);
__________________
Ale
  #9 (permalink)  
Antiguo 30/08/2004, 14:47
 
Fecha de Ingreso: noviembre-2002
Ubicación: Barcelona - España
Mensajes: 270
Antigüedad: 21 años, 5 meses
Puntos: 0
Hola Ale21ale, aquí tienes otro ejemplo. Lo tengo puesto a 200 de alto, pero modificalo a tu gusto.

Código PHP:
$exte=".jpg";
$yafoto=($nomgos $buffer $exte);
$path "../images3";
$max_size 250000;
if (
is_uploaded_file($userfile)) {
if (
$userfile_size>$max_size) { echo "EL ARCHIVO ES DEMASIADO GRANDE (max. 250 KB).<br>\n"; exit; }
if ((
$userfile_type=="image/gif") || ($userfile_type=="image/pjpeg")) {
if (
file_exists($path $userfile_name)) { echo "EL ARCHIVO YA EXISTE.<br>\n"; exit; }
$res copy($userfile$path $userfile_name);
if (!
$res) {
echo 
"Error al subir la imágen!<br>\n"; exit; }
else
echo 
"La imagen se ha subido con exito<br>\n";
// echo "Nombre del Archivo: $userfile_name<br>\n";
// echo "Tamaño del Archivo: $userfile_size bytes<br>\n";
// echo "Formato del Archivo: $userfile_type<br>\n";

$img=imagecreatefromjpeg($userfile);
$bx=imagesx($img);
$by=imagesy($img);
$my=200;
$mx=intval($my*$bx/$by);
$im=imagecreatetruecolor ($mx$my);
imagecopyresampled ($im$img0000$mx$my$bx$by);
imagejpeg($im,"../images3/$yafoto",75);
unlink($path $userfile_name); 
  #10 (permalink)  
Antiguo 30/08/2004, 14:57
 
Fecha de Ingreso: noviembre-2003
Ubicación: mar del plata
Mensajes: 107
Antigüedad: 20 años, 4 meses
Puntos: 0
Cocker : Gracias !!!! .. Como lo puedo aplicar ?

tengo que hacer un formulario que tome el archivo y que vaya a enviar.php (donde tengo que poner tu codigo) ? y el campo del archivo se tendria que llamar $userfile ?

gracias capo
__________________
Ale
  #11 (permalink)  
Antiguo 30/08/2004, 15:08
 
Fecha de Ingreso: noviembre-2002
Ubicación: Barcelona - España
Mensajes: 270
Antigüedad: 21 años, 5 meses
Puntos: 0
Hola ale21ale, logicamente tienes que hacer el formulario, y cambia el nombre de la carpeta, yo puse images3.
Lo que hace. es subir la imagen, la crea con nuevos valores y borra la antigua.
Fijate que el nombre de la foto nueva es una concatenación, pero ponlo a tu gusto.
  #12 (permalink)  
Antiguo 14/09/2004, 13:09
Avatar de José Molina  
Fecha de Ingreso: enero-2002
Ubicación: USA
Mensajes: 768
Antigüedad: 22 años, 3 meses
Puntos: 1
Saludos.

ale21ale revisa la ruta que estas colocando

$nombrefoto = ''c:/tuhosting/tucarptepa/foto.jpg';
$rutafisicafoto = 'c:/tuhosting/tucarptepa/foto.jpg';
$tamanoancho = '600';
$tamanoalto = '454';
__________________
José Molina
La marginalidad no esta en la incapacidad de calmar el hambre de un estómago sino en la incapacidad de calmar el hambre de la mente.
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:47.