Como cambiar el tamaño de una imagen JPG sin que esta se deforme.
En ocasiones, necesitamos mostrar una serie de imagenes en un espacio previamente definido, pero que pasa si las imagenes tienen diferentes medidas? PodrÃa ser que tengamos imágenes panorámicas o alargadas y al redimensionarlas a un area cuadrada por ejemplo, se verán deformes.
La idea de este código es poder escalar una imagen y si esta es muy alargada, deberá aprecer con dos franjas a los lados de manera que "Cuadre" perfectamente en el espacio asignado, si por el contrario, la imagen es ancha deberán aparecer franjas arriba y abajo.
Por ejemplo:
[imagen en="archivos/escalarimg.jpg"] Imágenes escaladas sobre un fondo azul
El código es el siguiente:
// Función para cambiar el tamaño de una imágen JPG // (imagen1) y genera una nueva (imagen2) function thumbjpegXY($imagen1,$anchura, $altura, $imagen2) { //echo $camino.$dir_thumb.$prefijo_thumb.$nombre." NO existÃa<br>\n"; $img = imagecreatefromjpeg($imagen1) or die("No se encuentra la imagen $camino$nombre<br>\n");
// miramos el tamaño de la imagen original... $datos = getimagesize($imagen1) or die("Problemas al leer $imagen1<br>\n"); // intentamos escalar la imagen original utilizando la ALTURA como base $ratio = ($datos[1] / $altura); $anchuraX = round($datos[0] / $ratio); $alturaX=$altura; $xpos=($anchura-$anchuraX)/2; $ypos=0;
// Si quedó muy ancha entonces calculamos con el ANCHO if($anchuraX >$anchura) { $ratio = ($datos[0] / $anchura); $alturaX = round($datos[1] / $ratio); $anchuraX=$anchura; $xpos=0; $ypos=($altura-$alturaX)/2; } // esta será la nueva imagen reescalada $thumb = imagecreatetruecolor($anchura,$altura); //Color de relleno $rellenoclr = imagecolorallocate($thumb, 0, 0, 0); //<-- rgb:0,0,0 = negro imagefill($thumb, 0, 0, $rellenoclr);
// con esta función la reescalamos imagecopyresized($thumb, $img, $xpos, $ypos, 0, 0, $anchuraX, $alturaX, $datos[0], $datos[1]);
// La salvamos con el nombre y en el lugar que nos interesa. imagejpeg($thumb,$imagen2); } |
y para utilizar la funcion simplemente utilizamos el siguiente código:
<? // escalamos la imagen para que mida 100 por 200 pixeles thumbjpegXY("imgs/Foto1.jpg",100, 120, "imgs/Foto1_ajustada.jpg"); // mostramos la foto echo "<img src='imgs/Foto1_ajustada.jpg'>"; ?> |
|