Como redimensionar una imagen con php
5 (100%) 12 votos

¿Te ha tocado desarrollar algún sistema en el que el usuario debe subir imágenes y estas a su vez deben respetar algún tamaño específico? El día de hoy aprenderemos como redimensionar una imagen con php, algo muy útil que te puede evitar muchos dolores de cabeza.

Hay ocasiones en las que tenemos que desarrollar sistemas que permitan subir múltiples imágenes al día, si desde un principio no le especificamos al usuario las dimensiones deseadas el subirá cualquier imagen sin importar las recomendaciones dadas.

El problema más común en estas situaciones es que al final tendremos almacenadas cientos de imágenes con proporciones muy fuera de lo que deseamos y a su vez la velocidad de carga en nuestro sistema se puede ver afectada ya que habrá imágenes muy pesadas por cargar.

Para evitar esto, desde nuestro sistema podemos prever y optimizar cualquier imagen que suban, el día de hoy te comparto un código bastante útil para aprender como redimensionar una imagen con php y al final almacenar solo imágenes con el tamaño deseado para nuestro sistema.

Código

//Como redimensionar una imagen con php
<?php
    function redimensionar_imagen($nombreimg, $rutaimg, $xmax, $ymax){  
        $ext = explode(".", $nombreimg);  
        $ext = $ext[count($ext)-1];  
      
        if($ext == "jpg" || $ext == "jpeg")  
            $imagen = imagecreatefromjpeg($rutaimg);  
        elseif($ext == "png")  
            $imagen = imagecreatefrompng($rutaimg);  
        elseif($ext == "gif")  
            $imagen = imagecreatefromgif($rutaimg);  
          
        $x = imagesx($imagen);  
        $y = imagesy($imagen);  
          
        if($x <= $xmax && $y <= $ymax){
            echo "<center>Esta imagen ya esta optimizada para los maximos que deseas.<center>";
            return $imagen;  
        }
      
        if($x >= $y) {  
            $nuevax = $xmax;  
            $nuevay = $nuevax * $y / $x;  
        }  
        else {  
            $nuevay = $ymax;  
            $nuevax = $x / $y * $nuevay;  
        }  
          
        $img2 = imagecreatetruecolor($nuevax, $nuevay);  
        imagecopyresized($img2, $imagen, 0, 0, 0, 0, floor($nuevax), floor($nuevay), $x, $y);  
        echo "<center>La imagen se ha optimizado correctamente.</center>";
        return $img2;   
    }

    $imagen_optimizada = redimensionar_imagen('imagen.jpg','images/imagen.jpg',700,700);
    imagejpeg($imagen_optimizada, "images/imagen_optimizada.jpg");
?>

Para iniciar tenemos la función redimensionar_imagen que recibe 4 parámetros (nombre de la imagen, ruta donde esta almacena la imagen, el máximo que deseamos para x y el máximo para y).

En las primeras líneas obtenemos la extensión de la imagen partiendo del nombreimg recibido y la almacenamos en la variable $ext.

A continuación, realizamos un par de validaciones para saber si la imagen es jpg, png o gif, dependiendo de la condición que se cumpla mandamos llamar un método nativo de php que recibe el parámetro $rutaimgy el resultado lo guardamos en la variable $imagen.

Los métodos que se llamaran en la sección anterior dependiendo del formato de nuestra imagen son: imagecreatefromjpeg(), imagecreatefrompng()imagecreatefromgif(), con cualquiera de estos lo único que hacemos es crea una nueva imagen a partir de un fichero o de una URL.

En las variables $x y $yalmacenamos el ancho y alto de la imagen creada anteriormente mediante el uso de los métodos imagesx e imagesy los cuales reciben como parámetro una imagen.

En la siguiente condición $x <= $xmax && $y <= $ymax lo único que hacemos es validar que si el ancho y alto es menor o igual a las dimensiones máximas que especificamos simplemente se salga ya que la imagen se encuentra dentro del rango que deseamos.

A continuación, tenemos otra estructura de control en la que validamos si $x >= $y, para el caso de que el ancho si sea mayor que el alto, a la variable $nuevax le asignamos el valor máximo que deseamos para x que tenemos almacenado en la variable $xmax, enseguida hacemos una simple regla de 3 para obtener el valor de yel cual almacenaremos en $nuevay.

En el caso contrario hacemos lo mismo pero en base a y, a $nuevay le asignamos el máximo que deseamos para y obtenemos x por medio de una regla de 3.

Hasta este punto ya tenemos los nuevos valores de xypara redimensionar la imagen original. Por medio del método nativo de php imagecreatetruecolor creamos el lienzo donde pintaremos más adelante nuestra imagen y lo almacenamos en la variable $img2.

Finalmente, llamamos el método de php imagecopyresized el cual se encargara de copiar y cambiar el tamaño de la imagen y recibe los siguientes parámetros:

  • $img2 : lienzo donde pintaremos la imagen destino
  • $imagen : imagen original
  • 0,0 : coordenada xyy del punto de destino
  • 0,0 : coordenada xyy del punto de origen
  • $nuevax : ancho del destino
  • $nuevay : alto del destino
  • $x : ancho original
  • $y : alto original

Para probar nuestra función agregamos las últimas dos líneas, simplemente llamamos la función redimensionar_imagen y guardamos la nueva imagen generada.

Resultados

como redimensionar una imagen con php

como redimensionar una imagen con php

Hasta aquí terminamos con esta explicación de como redimensionar una imagen con php, espero que te sirva para futuros desarrollos que realices, si te quedo alguna duda envíame un mail a contacto@denisseestradasiempre estoy atenta a cualquier consulta.

Saludos!

Comentarios
  • Jonathan Melgoza
    28 septiembre, 2016

    Muy buen ejemplo para redimensionar imagenes, y muy bien explicado.

    La regla de 3 es para que la imagen conserve su proporcion cierto?

    • denisse
      29 septiembre, 2016

      Claro, por medio de la regla de 3 sacamos el valor proporcional al máximo que definimos, con esto nos aseguramos que la imagen no se deforme o se genere con valores no proporcionales.

  • max
    2 octubre, 2016

    Y si subimos un gif o una .png o un jpeg… puffffff a la traste todo lo bonito… jajaajajajaja…

    • denisse
      2 octubre, 2016

      Hola amigo,

      Funciona perfectamente para formato jpg, jpeg y png, de hecho para lo que esta hecha la función, que es redimensionar la imagen, también funciona bien para los gifs.. el problema con los gifs viene con la animación. Cabe notar que las lineas de al final son únicamente para propósitos de prueba.

      Saludos!

  • mary aguilera
    3 octubre, 2016

    muy chiquilla lo voy a intentar, me gusta para mis imagenes cuidate saludos

  • jad
    4 abril, 2017

    se deforma la imagen, esta orrible. que puedo hacer ?

    • Denisse Estrada
      9 abril, 2017

      Hola Jad,
      Si has seguido el ejemplo la imagen no debería haberse deformado, asegúrate de haber seguido todos los pasos, cualquier duda me comentas, saludos!

  • lurugardo
    31 agosto, 2017

    Muy linda función. Para agregar para aquellos como yo que necesitan renombrar imágenes agregar un imagedestroy($imagenOriginal); para que no quede por ahí mariposeando la imagen en nuestro server jajajaja

    Muy buena function… Saludos

Leave a Comment