Foros del Web » Programando para Internet » PHP »

Reducir el tamaño de una imagen

Estas en el tema de Reducir el tamaño de una imagen en el foro de PHP en Foros del Web. Hola a todos, necesito reducir el peso, la capcidad de una imagen si éste es superior a un límite que le fijo. Hay alguna función ...
  #1 (permalink)  
Antiguo 02/11/2005, 08:38
 
Fecha de Ingreso: mayo-2004
Mensajes: 101
Antigüedad: 19 años, 11 meses
Puntos: 0
Reducir el tamaño de una imagen

Hola a todos,

necesito reducir el peso, la capcidad de una imagen si éste es superior a un límite que le fijo.
Hay alguna función de php que ya lo haga?


gracias
  #2 (permalink)  
Antiguo 03/11/2005, 03:30
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 19 años, 8 meses
Puntos: 102
No una función propia, pero sí tienes herrameintas.

Te dejo una función que hice hace tiempo: http://www.forosdelweb.com/showpost....65&postcount=3

La función propia te podrá servir aún no hagas el upload... para trabajar con otros formatos usa las funciones equivalentes (www.php.net/gd). Puedes basarte igual en las FAQ (busca las funciones de thumbnails) que están más completas.

Si hay problemas mencionalos. Suerte!
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #3 (permalink)  
Antiguo 03/11/2005, 08:39
 
Fecha de Ingreso: mayo-2004
Mensajes: 101
Antigüedad: 19 años, 11 meses
Puntos: 0
Qué librería?

Jam1138,

la función que me propones es más o menos la que necesito lo único que la función : ImageCreateFromJpeg() e ImageJPEG(), no me las reconoce, he de utilizar alguna dll?

Gracias
  #4 (permalink)  
Antiguo 03/11/2005, 19:14
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 19 años, 8 meses
Puntos: 102
Sí, la librería GD: www.php.net/gd

__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #5 (permalink)  
Antiguo 23/11/2005, 14:43
 
Fecha de Ingreso: marzo-2005
Mensajes: 201
Antigüedad: 19 años
Puntos: 0
Si tengo este script para subir y colocar el archivo de imagen, ¿puedo utilizar la función sugerida? ¿Dónde la coloco?
Código PHP:
 <body>
<form action="" method="post" enctype="multipart/form-data" name="form" id="form">
          
          <input name="titulo" type="text" id="titulo">
          <textarea name="texto" id="texto"></textarea>
          <input name="archivo" type=file id="archivo">
          <input name="submit" type=submit value=Upload>
          <input type="reset" name="Reset" value="Borrar">
</form>
</body>
</html>
<?php        
$extensiones
=array("jpg","jpeg");
$dbuser="prueba"//usuario de la base de datos
$dbpass="prueba"// password para la base



if (isset($_FILES['archivo']['name'])){ // si estoy subiendo el archivo o es la primera carga de la pagina


    
$path="imagenes/"// path adonde la voy a guardar, en este caso mi_ubicacion_actual/imagenes
    
$nombre=$_FILES['archivo']['name'];
    
$tamanio=$_FILES['archivo']['size'];
    
$tipo=$_FILES['archivo']['type'];
    
$var explode(".","$nombre");
    
$num count($extensiones);
    
$valor $num-1;
    
$admitido=false;
    
    
    for(
$i=0$i<=$valor$i++) {
        if(
$extensiones[$i] == $var[1]) {        
            
$admitido=true;//es una extension valida
            
break;
        }
    }
    if (
$admitido){
          
$link=mysql_connect("localhost",$dbuser,$dbpass);
        
mysql_select_db("test");
        
$tamanio=round($tamanio/1024,0); //redondeo y paso a kb
        
$sql="Insert Into pics (tipo,size,path,titulo,texto) values ('" .$tipo"'," .$tamanio",'" .$path"','$titulo','$texto')";                  
        
mysql_query($sql);
        
$lastid=mysql_insert_id();
        
$path.=$lastid "-" $nombre
        
$sql="Update pics set path='" $path "' Where id=$lastid"
        
mysql_query($sql);        
        
        if (
is_uploaded_file($_FILES['archivo']['tmp_name']))
         {
              
copy($_FILES['archivo']['tmp_name'], "$path");?>
        <font color="#CCCCCC" size="2" face="Verdana, Arial, Helvetica, sans-serif">El  
        archivo se ha subido correctamente al servidor.</font> 
        
        <?php
        
if (mysql_affected_rows($link)==0){?>
        <font color="#CCCCCC" size="2" face="Verdana, Arial, Helvetica, sans-serif">Ocurrio un error guardando 
        en la base de datos. </font> 
        <?php
         
}
         }
        else 
            { 
?>
        <font color="#CCCCCC" size="2" face="Verdana, Arial, Helvetica, sans-serif">Error 
        al subir el archivo.</font> 
        <?php
        
}

    
    }else{
?>
        <font color="#CCCCCC" size="2" face="Verdana, Arial, Helvetica, sans-serif">Tipo 
        de archivo no admitido, debe ser .jpg &oacute; .jpeg</font> 
        <?php
    
}
}    
    
?>

Última edición por jam1138; 23/11/2005 a las 15:45
  #6 (permalink)  
Antiguo 23/11/2005, 15:59
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 19 años, 8 meses
Puntos: 102
Se te agradeceria nngg que procuraras utilizar las etiquetas correspondientes cuando manejes código. Ve que se lee mejor por lo que es más sencillo ayudarte.

Respecto a la función.. Si, sí te servirá. Para implementarla tendrias que poner la función al inicio de tu código. Desde donde dice "function redimencionar($file) {" hasta antes de "// Suponiendo se tiene <input type="file" name="imagen">". Posteriormente agregas la llamada a la función pasándole la ruta que haz generado:
Código PHP:
        if (is_uploaded_file($_FILES['archivo']['tmp_name'])) 
         { 
              
copy($_FILES['archivo']['tmp_name'], "$path");
                   if(!
redimencionar($path)) 
                          else echo 
"No se pudo redimencionar la imágen<br>"
?> 
... te diria que empezaras por eso y vieras si produce algún fallo. Espero que no.

Ten en cuanta que lo que hará la función es REEMPLAZAR tu original y que es una función muy sencilla, muy simple (simplemente demostrativa). Lo que implica que reemplaze a la imágen es que el dato que estás guardando como "peso del archivo" ya no corresponderá ya que ese dato lo obtienes del archivo original, al ser redimencionado ya no persará lo mismo... tendrías que ocupar la función filesize() para obtener el nuevo dato y la tendrías que emplear antes de guardar la info en la BD y después de ocupar la función. Si entiendes eso te será sencillo modificarlo (solo es cuestión de ordenar las cosas), si tienes problemas indicalos.... pero primero ver si la función te es útil.

Suerte!
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #7 (permalink)  
Antiguo 23/11/2005, 20:50
 
Fecha de Ingreso: marzo-2005
Mensajes: 201
Antigüedad: 19 años
Puntos: 0
Perdón, no llego a entender dónde debo colocar el código para redimensionar, o por lo menos no logro que funcione, porque ni marca error pero tampoco cambia el tamaño de las imagenes.
Te molesto de nuevo:
Este es script "original" que tengo:
<?php
$extensiones
=array("jpg","jpeg");
$dbuser="prueba"; //usuario de la base de datos
$dbpass="prueba"; // password para la base



if (isset($_FILES['archivo']['name'])){ // si estoy subiendo el archivo o es la primera carga de la pagina


$path="imagenes/"; // path adonde la voy a guardar, en este caso mi_ubicacion_actual/imagenes
$nombre=$_FILES['archivo']['name'];
$tamanio=$_FILES['archivo']['size'];
$tipo=$_FILES['archivo']['type'];
$var = explode(".","$nombre");
$num = count($extensiones);
$valor = $num-1;
$admitido=false;


for(
$i=0; $i<=$valor; $i++) {
if(
$extensiones[$i] == $var[1]) {
$admitido=true;//es una extension valida
break;
}
}
if (
$admitido){
$link=mysql_connect("localhost",$dbuser,$dbpass);
mysql_select_db("test");
$tamanio=round($tamanio/1024,0); //redondeo y paso a kb
$sql="Insert Into pics (tipo,size,path,titulo,texto) values ('" .$tipo. "'," .$tamanio. ",'" .$path. "','$titulo','$texto')";
mysql_query($sql);
$lastid=mysql_insert_id();
$path.=$lastid . "-" . $nombre;
$sql="Update pics set path='" . $path . "' Where id=$lastid";
mysql_query($sql);

if (
is_uploaded_file($_FILES['archivo']['tmp_name']))
{
copy($_FILES['archivo']['tmp_name'], "$path");?>
<font color="#CCCCCC" size="2" face="Verdana, Arial, Helvetica, sans-serif">El
archivo se ha subido correctamente al servidor.</font>

<?php
if (mysql_affected_rows($link)==0){?>
<font color="#CCCCCC" size="2" face="Verdana, Arial, Helvetica, sans-serif">Ocurrio un error guardando
en la base de datos. </font>
<?php
}
}
else
{
?>
<font color="#CCCCCC" size="2" face="Verdana, Arial, Helvetica, sans-serif">Error
al subir el archivo.</font>
<?php
}


}else{
?>
<font color="#CCCCCC" size="2" face="Verdana, Arial, Helvetica, sans-serif">Tipo
de archivo no admitido, debe ser .jpg &oacute; .jpeg</font>
<?php
}
}

?>


y éste el que debería agregar (lo pongo a continuación):
  #8 (permalink)  
Antiguo 23/11/2005, 20:51
 
Fecha de Ingreso: marzo-2005
Mensajes: 201
Antigüedad: 19 años
Puntos: 0

<?php
function redimencionar($file) {
// Función que REEMPLAZA una imágen JPEG por otra con diferenetes dimenciones...
// Se da por echo la imágen existe y es una imágen JPEG (no se hacen validaciones)

$imagen = ImageCreateFromJPEG($file);
unlink($file); // BORRAMOS el archivo original
$width = imagesx($imagen);
$height = imagesy($imagen);

$nueva_anchura = 200; // Define aquí el ancho requerdo
$nueva_altura = ($nueva_anchura * $height) / $width ;// Para un alto proporcinal (RECOMENDADO) ó ingresa directamente el alto requerido.

if (function_exists("imagecreatetruecolor")) {
$calidad = ImageCreateTrueColor($nueva_anchura, $nueva_altura);
} else
$calidad = ImageCreate($nueva_anchura, $nueva_altura);

ImageCopyResized($calidad, $imagen, 0, 0, 0, 0, $nueva_anchura, $nueva_altura, $width, $height);
ImageJPEG($calidad, $file, 100);
imagedestroy($imagen);
return
true;
// Forma de uso:
// redimencionar(/ruta/archivo.jpg)
}

// Suponiendo se tiene <input type="file" name="imagen">
if (is_uploaded_file($_FILES['imagen']['tmp_name'])) {
if (
$_FILES['imagen']['type'] == "image/jpeg" || $_FILES['imagen']['type'] == "image/pjpeg"){
$nombre= "imagenes/".$_FILES['imagen']['name']; // Conserva su nombre original, se guarda en una carpeta imagenes
if(move_uploaded_file($_FILES['imagen']['tmp_name'], $nombre)) {
if(
redimencionar($nombre)) {// una vez definido el nombre del archivo no importa dónde se llame a la función
echo "<img src=\"$nombre\">";
} else echo
"La función redimencionar() tubo fallos<br>";
} else echo
"<b>ERROR:</b><br> No se pudo mover el archivo<br>";
} else echo
"<b>Tipo de archívo inválido</b><br>";
} else echo
"Error al subir el archivo....<br>";
?>


Muchas gracias de nuevo
  #9 (permalink)  
Antiguo 24/11/2005, 15:40
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 19 años, 8 meses
Puntos: 102
Cita:
Iniciado por jam1138
poner la función al inicio de tu código. Desde donde dice "function redimencionar($file) {" hasta antes de "// Suponiendo se tiene <input type="file" name="imagen">". Posteriormente agregas la llamada a la función pasándole la ruta que haz generado
Código PHP:
<?php 

function redimencionar($file) { 
// Función que REEMPLAZA una imágen JPEG por otra con diferenetes dimenciones... 
// Se da por echo la imágen existe y es una imágen JPEG (no se hacen validaciones) 

$imagen ImageCreateFromJPEG($file); 
unlink($file); // BORRAMOS el archivo original 
$width imagesx($imagen); 
$height imagesy($imagen); 

$nueva_anchura 200// Define aquí el ancho requerdo 
$nueva_altura = ($nueva_anchura $height) / $width ;// Para un alto proporcinal (RECOMENDADO) ó ingresa directamente el alto requerido. 

if (function_exists("imagecreatetruecolor")) { 
$calidad ImageCreateTrueColor($nueva_anchura$nueva_altura); 
} else 
$calidad ImageCreate($nueva_anchura$nueva_altura); 

ImageCopyResized($calidad$imagen0000$nueva_anchura$nueva_altura$width$height); 
ImageJPEG($calidad$file100); 
imagedestroy($imagen); 
return 
true
// Forma de uso: 
// redimencionar(/ruta/archivo.jpg) 



$extensiones=array("jpg","jpeg"); 
$dbuser="prueba"//usuario de la base de datos 
$dbpass="prueba"// password para la base 



if (isset($_FILES['archivo']['name'])){ // si estoy subiendo el archivo o es la primera carga de la pagina 


$path="imagenes/"// path adonde la voy a guardar, en este caso mi_ubicacion_actual/imagenes 
$nombre=$_FILES['archivo']['name']; 
$tamanio=$_FILES['archivo']['size']; 
$tipo=$_FILES['archivo']['type']; 
$var explode(".","$nombre"); 
$num count($extensiones); 
$valor $num-1
$admitido=false


for(
$i=0$i<=$valor$i++) { 
if(
$extensiones[$i] == $var[1]) { 
$admitido=true;//es una extension valida 
break; 


if (
$admitido){ 
$link=mysql_connect("localhost",$dbuser,$dbpass); 
mysql_select_db("test"); 
$tamanio=round($tamanio/1024,0); //redondeo y paso a kb 
$sql="Insert Into pics (tipo,size,path,titulo,texto) values ('" .$tipo"'," .$tamanio",'" .$path"','$titulo','$texto')"
mysql_query($sql); 
$lastid=mysql_insert_id(); 
$path.=$lastid "-" $nombre
$sql="Update pics set path='" $path "' Where id=$lastid"
mysql_query($sql); 

if (
is_uploaded_file($_FILES['archivo']['tmp_name'])) 
         { 
              
copy($_FILES['archivo']['tmp_name'], "$path"); 
                   if(!
redimencionar($path)) 
                          else echo 
"No se pudo redimencionar la imágen<br>"

?> 
<font color="#CCCCCC" size="2" face="Verdana, Arial, Helvetica, sans-serif">El 
archivo se ha subido correctamente al servidor.</font> 

<?php 
if (mysql_affected_rows($link)==0){?> 
<font color="#CCCCCC" size="2" face="Verdana, Arial, Helvetica, sans-serif">Ocurrio un error guardando 
en la base de datos. </font> 
<?php 


else 
?> 
<font color="#CCCCCC" size="2" face="Verdana, Arial, Helvetica, sans-serif">Error 
al subir el archivo.</font> 
<?php 



}else{
?> 
<font color="#CCCCCC" size="2" face="Verdana, Arial, Helvetica, sans-serif">Tipo 
de archivo no admitido, debe ser .jpg &oacute; .jpeg</font> 
<?php 



?>
... el foro cuenta con etiquetas para encerrar código. Para PHP tienes [ PHP] código [ /PHP] (sin espacio)... en el editor tiene su propio botón PHP, también esta la etiqueta [HTML] y [CODE]... entre muchas otras. Buscalo en las opciones.

Saludos!
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
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 11:38.