En el blog de pablotilli.com.ar encontre este post que explica muy bien la redimension de imagen con php.
Para redimensionar una imagen con PHP; lo primero que tendremos que hacer, es cargar la imagen en memoria para poder trabajar con ella. Para esto, PHP nos brinda varias funciones dependiendo del formato de la imagen. Las funciones mas usadas son:
Ahora que tenemos la imagen cargada en memoria, podemos averiguar el ancho y el alto con las funciones imagex (para el acho) e imagey (para el alto):
Caso 1: que el ANCHO de la imagen redimensionada sea de 250px, y el ALTO sea calculado proporcionalmente.
Para redimensionar una imagen con PHP; lo primero que tendremos que hacer, es cargar la imagen en memoria para poder trabajar con ella. Para esto, PHP nos brinda varias funciones dependiendo del formato de la imagen. Las funciones mas usadas son:
-
imagecreatefrompng -
imagecreatefromgif - imagecreatefromjpeg
$ruta_imagen = 'imagen_de_prueba.png'; $imagen_original = imagecreatefrompng($ruta_imagen);Como veras, simplemente necesitamos pasarle a la función imagecreatefrompng, la ruta completa al archivo que queremos cargar (el mecanismo es exactamente igual para imagecreatefromgif y imagecreatefromjpeg).
Ahora que tenemos la imagen cargada en memoria, podemos averiguar el ancho y el alto con las funciones imagex (para el acho) e imagey (para el alto):
//Obtenemos el ancho de la imagen que cargamos ($imagen_original) $ancho_original = imagesx($imagen_original); //Obtenemos el alto de la imagen que cargamos ($imagen_original) $alto_original = imagesy($imagen_original);Para que al redimensionar la imagen; ésta no se deforme, debemos mantener proporcionados el ancho y el alto que queremos para la imagen final, es decir, si queremos llevar la imagen a un ancho fijo, deberemos calcular el alto, y si lo que queremos es que el alto final sea fijo, tendremos que calcular el ancho. Veamos el código para los dos casos :
Caso 1: que el ANCHO de la imagen redimensionada sea de 250px, y el ALTO sea calculado proporcionalmente.
$ancho_final = 250; $alto_final = ($ancho_final / $ancho_original) * $alto_original;Caso 2: que el ALTO de la imagen redimensionada sea de 250px , y el ANCHO sea calculado proporcionalmente.
$alto_final = 250; $ancho_final = ($alto_final / $alto_original) * $ancho_original;Ahora que sabemos como calcular el ancho y el alto final de la imagen sin que se deforme, crearemos una "imagen vacía" en memoria, con estas dimensiones, utilizando la función imagecreatetruecolor:
$imagen_redimensionada = imagecreatetruecolor($ancho_final, $alto_final);A continuación usaremos la función imagecopyresampled para copiar la imagen desde $imagen_original hacia $imagen_redimensionada, pero con las nuevas dimensiones:
imagecopyresampled($imagen_redimensionada, $imagen_original, 0, 0, 0, 0, $ancho_final,
$alto_final, $ancho_original, $alto_original);Guardamos la nueva imagen (ya redimensionada) con la función imagepng (también existen imagegif e imagejpeg entre otras):
imagepng($imagen_redimensionada, 'imagen_redimensionada.png');Una vez guardada la imagen redimensionada liberamos recursos destruyendo la imágenes en memoria, utilizando la función imagedestroy:
imagedestroy($imagen_original); imagedestroy($imagen_redimensionada);Listo, ya tenemos la imagen redimensionada y guardada en disco. En el ejemplo, la imagen la guardamos con un nombre distinto al de la original, de lo contrario sobreescribiría a ésta; según las necesidades de tu proyecto, tal vez no necesites conservar la imagen sin redimensionar, así que podrías usar el mismo nombre.
Todo el código junto
$ruta_imagen = 'imagen_de_prueba.png';
//Cargo en memoria la imagen que quiero redimensionar
$imagen_original = imagecreatefrompng($ruta_imagen);
//Obtengo el ancho de la imagen quecargue
$ancho_original = imagesx($imagen_original);
//Obtengo el alto de la imagen que cargue
$alto_original = imagesy($imagen_original);
//SI QUEREMOS UN ANCHO FINAL FIJO, calculamos el ALTO de forma proporcionada
$ancho_final = 250;
//Ancho final en pixeles
$alto_final = ($ancho_final / $ancho_original) * $alto_original;
//SI CONOCEMOS UN ALTO FINAL FIJO, calculamos el ANCHO de forma proporcionada
//Para usar este caso, comentar las dos lineas anteriores, y descomentar las dos
siguientes a este comentario
/*$alto_final = 250; //Alto final en pixeles
$ancho_final = ($alto_final / $alto_original) * $ancho_original;*/
//Creo una imagen vacia, con el alto y el ancho que tendrá la imagen
redimensionada
$imagen_redimensionada = imagecreatetruecolor($ancho_final, $alto_final);
//Copio la imagen original con las nuevas dimensiones a la imagen en blanco
que creamos en la linea anterior
imagecopyresampled($imagen_redimensionada, $imagen_original, 0, 0, 0, 0,
$ancho_final, $alto_final, $ancho_original, $alto_original);
//Guardo la imagen ya redimensionada
imagepng($imagen_redimensionada, 'imagen_redimensionada.png');
//Libero recursos, destruyendo las imágenes que estaban en memoria
imagedestroy($imagen_original);
imagedestroy($imagen_redimensionada);
?>
En otras entradas, iremos viendo como hacer mas cosas interesantes con imágenes y PHP. Si tienes alguna pregunta o sugerencia no dudes en comentarla.
No hay comentarios:
Publicar un comentario