Foros del Web » Programando para Internet » PHP »

Redimensionar imagen con PHP de forma proporcional

Estas en el tema de Redimensionar imagen con PHP de forma proporcional en el foro de PHP en Foros del Web. Hola, hace tiempo que estoy renegando con un codigo para poder redimensionar imagenes proporcionalmente y que a la vez tengan poco peso en KB. Pude ...
  #1 (permalink)  
Antiguo 22/02/2011, 08:30
 
Fecha de Ingreso: enero-2010
Mensajes: 150
Antigüedad: 14 años, 3 meses
Puntos: 0
Redimensionar imagen con PHP de forma proporcional

Hola, hace tiempo que estoy renegando con un codigo para poder redimensionar imagenes proporcionalmente y que a la vez tengan poco peso en KB. Pude programar la parte en que la foto sube al servidor al igual que el thumbnail. Ahora me faltaria el codigo para que redimensione proporcionalmente segun un ancho dado.

Aquí les paso parte del codigo que tengo para que me ayuden en que tendria que agragar para poder redimensionar imagenes.

Código PHP:
Ver original
  1. <?php
  2. mysql_select_db($database_redimension, $redimension);
  3.  
  4. $nombre = $_POST["textNombre"];
  5.  
  6.        $status = "";
  7.       ($_POST["action"] == "upload") or die ("Error al subir la imagen.");
  8.           // obtenemos los datos del archivo
  9.           $tamano = $_FILES["archivo"]['size'];
  10.           $tipo = $_FILES["archivo"]['type'];
  11.           $archivo = $_FILES["archivo"]['name'];
  12.           $prefijo = substr(md5(uniqid(rand())),0,6);
  13.          
  14.          
  15.             ($archivo != "") or die ("Error al subir la imagen ".$archivo);
  16.            
  17.              // guardamos el archivo a la carpeta "Fotos"
  18.              
  19.               $destino = "Fotosprueba/".$prefijo."_".$archivo;
  20.        
  21.               $info_imagen = getimagesize($destino);
  22.               $ancho = $info_imagen[0];
  23.               $alto = $info_imagen[1];
  24.               if($ancho>=$alto)
  25.                  {
  26.                   $nuevo_alto = round($alto * 500 / $ancho,0);  
  27.                   $nuevo_ancho=$medida;
  28.                   }
  29.               else
  30.                  {
  31.                   $nuevo_ancho = round($ancho * 500 / $alto,0);
  32.                   $nuevo_alto =$medida;  
  33.                  }
  34.               $imagen_nueva = imagecreatetruecolor($nuevo_ancho, $nuevo_alto);
  35.               $imagen_vieja = imagecreatefromjpeg($imagen);
  36.               imagecopyresampled($imagen_nueva, $imagen_vieja, 0, 0, 0, 0, $nuevo_ancho, $nuevo_alto, $ancho, $alto);
  37.               if (!imagejpeg($imagen_nueva, "$imagen"))
  38.                 return false;
  39.                   return true;
  40.    
  41.         //    (copy($_FILES['archivo']['tmp_name'],$destino)) or die ("Error al subir la imagen ".$archivo);
  42.         //      $status = "La imagen <b>".$archivo."</b> se ha subido correctamente!";
  43.         //      echo $status;  ?>
  44.  
  45.                   <?        
  46.          //aquí empieza el código de creación del thumbnail
  47.           $source=$destino; // archivo de origen
  48.           $dest="Fotosprueba/Thumbs/".$prefijo."_".$archivo; // archivo de destino
  49.           $width_d=130; // ancho de salida
  50.           $height_d=98; // alto de salida
  51.  
  52.             list($width_s, $height_s, $type, $attr) = getimagesize($source, $info2); // obtengo información del archivo
  53.           $gd_s = imagecreatefromjpeg($source); // crea el recurso gd para el origen
  54.           $gd_d = imagecreatetruecolor($width_d, $height_d); // crea el recurso gd para la salida
  55.  
  56.             imagecopyresampled($gd_d, $gd_s, 0, 0, 0, 0, $width_d, $height_d, $width_s, $height_s); // redimensiona
  57.             imagejpeg($gd_d, $dest); // graba
  58.        
  59.         // Se liberan recursos
  60.         imagedestroy($gd_s);
  61.         imagedestroy($gd_d);
  62.  
  63.                 $carga = "INSERT INTO aficionados (foto, thumb, descripcion) VALUES ('$destino','$dest','$nombre')";
  64.                 $Resul = mysql_query($carga, $redimension) or die(mysql_error());
  65. ?>


Desde ya muchas gracias y espero que me puedan ayudar. Saludos.
  #2 (permalink)  
Antiguo 22/02/2011, 11:29
 
Fecha de Ingreso: diciembre-2010
Mensajes: 788
Antigüedad: 13 años, 4 meses
Puntos: 51
Respuesta: Redimensionar imagen con PHP de forma proporcional

Te paso una función para obtener dimensiones proporcionales en base al tamaño real y al máximo que puede tomar ( siempre que sea menor al real ).

Código PHP:
Ver original
  1. function getNewSize($w, $h, $lw, $lh) {
  2.     //obtain an new size from start, max dimesions
  3.     if($w > $lw) {
  4.         $percent = ($lw * 100) / $w;
  5.         $w = $lw;
  6.         $h = $h * ($percent / 100);
  7.     }
  8.     if($h > $lh) {
  9.         $percent = ($lh * 100) / $h;
  10.         $h = $lh;
  11.         $w = $w * ($percent / 100);
  12.     }
  13.     return array('w' => $w, 'h' => $h);
  14. }

Los parámetros son: $w y $h tamaño real ( en este caso, el de tu imagen) y $lw, $lh son el tamaño máximo que puede tomar.
  #3 (permalink)  
Antiguo 22/02/2011, 12:18
 
Fecha de Ingreso: enero-2010
Mensajes: 150
Antigüedad: 14 años, 3 meses
Puntos: 0
Respuesta: Redimensionar imagen con PHP de forma proporcional

Gracias por responder Walter. Como adaptaria esta función con lo que tengo hecho? Tendria que borrar alguna parte de mi codigo?. Esa función redimensional solo la imagen mayor o el thumbnail tambien?.

Disculpa las molestias y gracias.
  #4 (permalink)  
Antiguo 22/02/2011, 14:30
 
Fecha de Ingreso: diciembre-2010
Mensajes: 788
Antigüedad: 13 años, 4 meses
Puntos: 51
Respuesta: Redimensionar imagen con PHP de forma proporcional

Con esa función obtenés dos dimensiones menores proporcionales, no hace nada con imágenes. En tu caso, obtenés las dimensiones reales, se las pasás a la función junto con las dimensiones a la que la quieras llevar. Ya teniendo las nuevas dimensiones de tu imagen, aplicás algo como esto que tenés con las nuevas medidas:

Código PHP:
Ver original
  1. imagecopyresampled($imagen_nueva, $imagen_vieja, 0, 0, 0, 0, $nuevo_ancho, $nuevo_alto, $ancho, $alto);
  #5 (permalink)  
Antiguo 22/02/2011, 14:43
 
Fecha de Ingreso: septiembre-2009
Mensajes: 230
Antigüedad: 14 años, 6 meses
Puntos: 2
Respuesta: Redimensionar imagen con PHP de forma proporcional

Yo tengo esta funcion que lo que haces es impedir que las imagenes sean superiores a 720px 540px, es la misma que usa facebook, aunque la hice yo..

Código PHP:
                           // Le doy un valor RANDOM al nombre del archivo para evitar errores
                           
$randomtext substr(md5(uniqid(rand())),0,6);
                           
                           
// Le doy la ruta de subida
                           
$uploaddir=$upload_folder.$_SESSION['nickname'].'/'.$album."/";
                           
                           
// Sacamos caracteres especiales al archivo subido por si es un script malicioso
                           
$nombre htmlspecialchars($nombre);
                           
                           
// Empiezo el proceso para achivar el tamaño y dimensiones de la imágen
                            //$maxsize += 8;
                            
list($width$height) = getimagesize("$archivo");
                            list(
$widthTRUE$heightTRUE) = getimagesize("$archivo");
                            if(
$width '720'$width '720';
                            elseif(
$width <= '720'$width $width;
                            if(
$height '540'$height '540';
                            elseif(
$height <= '540'$height $height;
                            
//$width = min($width, $height);
                            
$tn imagecreatetruecolor($width$height);
                            
$image imagecreatefromjpeg("$archivo");
                            
imagecopyresampled($tn$image0000$width$height$widthTRUE$heightTRUE);
                            
                           
//if(copy($archivo, $uploaddir.$randomtext.'_'.$nombre))
                           
if(imagejpeg($tn$uploaddir.$randomtext.'_'.$nombre90))
                                {
                                   echo 
"<b>Subida con Exito:</b> ".$nombre."<br />";
                                   
$subida true;
                                } 
  #6 (permalink)  
Antiguo 08/12/2011, 15:51
 
Fecha de Ingreso: agosto-2009
Ubicación: Lima
Mensajes: 15
Antigüedad: 14 años, 7 meses
Puntos: 0
Respuesta: Redimensionar imagen con PHP de forma proporcional

Y como puedo hacer con imagenes que no estan en mi servidor, x ejemplo las que pongo una url en un input text

Etiquetas: redimensionar, formulario
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 23:03.