Como escalar una imagen utilizando PHP y las funciones de la librería GD
El siguiente código tiene como objeto cambiar el tamaño de una imagen por código en PHP.
La idea es poder tener imágenes de muy alta calidad y esas mismas publicarlas en el Web sin necesidad de hacer una copia más pequeña de las mismas.
La imágen resultante que sería mucho mas pequeña es la que se publicará y transferirá a través de la red a los usuarios finales.
A continuación se presenta la función que realiza el proceso de escalar las imágenes:
function thumbjpeg($imagen,$altura) { /* Lugar donde se guardarán los thumbnails respecto a la carpeta donde está la imagen "grande". */ $dir_thumb = "thumbs/"; /* Prefijo que se añadirá al nombre del thumbnail. Ejemplo: "imagen1.jpg" -> "tn_imagen1.jpg" */ $prefijo_thumb = "tn_".$altura."_"; $camino_nombre=explode("/",$imagen); /* Aquí tendremos el nombre de la imagen. */ $nombre=end($camino_nombre); /* Aquí la ruta especificada para buscar la imagen. */ $camino=substr($imagen,0,strlen($imagen)-strlen($nombre));
/* Intentamos crear el directorio de thumbnails, si no existiera previamente. */ if (!file_exists($camino.$dir_thumb)) mkdir ($camino.$dir_thumb, 0777) or die("No se ha podido crear el directorio $dir_thumb");
/* Aquí comprobamos que la imagen que queremos crear no exista previamente */ if (!file_exists($camino.$dir_thumb.$prefijo_thumb.$nombre)) { $img = imagecreatefromjpeg($camino.$nombre) or die("No se encuentra la imagen $camino$nombre<br>\n");
/* miramos el tamaño de la imagen original... */ $datos = getimagesize($camino.$nombre) or die("Problemas con $camino$nombre<br>\n");
/* intentamos escalar la imagen original a la medida que nos interesa */ $ratio = ($datos[1] / $altura); $anchura = round($datos[0] / $ratio);
/* esta será la nueva imagen reescalada */ $thumb = imagecreatetruecolor($anchura,$altura); /* con esta función la reescalamos */ imagecopyresized($thumb, $img, 0, 0, 0, 0, $anchura, $altura, $datos[0], $datos[1]); /* la salvamos con el nombre y en el lugar que nos interesa. */ imagejpeg($thumb,$camino.$dir_thumb.$prefijo_thumb.$nombre); } return($camino.$dir_thumb.$prefijo_thumb.$nombre); } |
Los parámetros que recibe la función son la ruta de la imagen a escalar y el porcentaje que deberá quedar la imagen resultante.
Esta función tomará la imágen original llamada por ejemplo imagen1.jpg y nos producira una de menor tamaño llamada tn_imagen1.jpg (le antepone tn_ ). Además, la copia se colocará en una carpeta llamada /thumbs/ que se encontrará en la misma carpeta que las imágenes originales.
NOTA: dicha carpeta thumbs deberá crearse previamente y deberá tener los permiso de escritura correspondientes para el usuario de internet. (Si queremos facilitarnos la vida, podemos ponerle Control Total para Todos los usuarios, pero solo a esta carpeta)
La función nos regresa, si tiene éxito, la ruta de la imagen creada y la podemos utilizar para ponersela como parámetro a una etiqueta IMG de HTML.
Por ejemplo:
/* LLamamos a la función para comprimir la imagen a un 30 por ciento del tamaño original */ $imgchica=thumbjpeg_P("IMGS/EJEMPLO.jpg",50);
/* Publicamos la nueva imagen */ echo "<img border=0 src='$imgchica'>"; |
|