Como generar un Thumbnail en PHP utilizando GD


Antes que nada avisar que se requieren las librerías GD para poder realizar los thumbnails. Y en función de la versión de GD, podremos usar una u otra función

Primero pegaré el código de una función con la que generaremos directamente un thumbnail de alta calidad.

Código PHP:
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: si la imagen grande fuera “imagen1.jpg”,
// el thumbnail se llamaría “tn_imagen1.jpg”
$prefijo_thumb = “tn_”;

// Aquí tendremos el nombre de la imagen.
$nombre=basename($imagen);
// Aquí la ruta especificada para buscar la imagen.
$camino=dirname($imagen).”/”;

// 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 “.$camino.$dir_thumb);

// Aquí comprovamos que la imagen que queremos crear no exista previamente
if (!file_exists($camino.$dir_thumb.$prefijo_thumb.$nombre)) {
echo $camino.$dir_thumb.$prefijo_thumb.$nombre.” NO existía
\\n”;
$img = @imagecreatefromjpeg($camino.$nombre) or die(“No se encuentra la imagen $camino$nombre
\\n”);

// miramos el tamaño de la imagen original…
$datos = getimagesize($camino.$nombre) or die(“Problemas con $camino$nombre
\\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
imagecopyresampled ($thumb, $img, 0, 0, 0, 0, $anchura, $altura, $datos[0], $datos[1]);

// voilà la salvamos con el nombre y en el lugar que nos interesa.
imagejpeg($thumb,$camino.$dir_thumb.$prefijo_thumb.$nombre);
}
}
Para llamar a la función sencillamente hacer:

Código PHP:
thumbjpeg($imagen, 125);
En este caso, ‘$imagen’, es la imagen que queremos reducir, y ‘125’, es la altura en píxeles que queremos que tenga la imagen reducida, de modo que el ancho quede proporcionado respecto a la imagen original.

Con la instrucción “or die()” se mostrará en pantalla el mensaje entrecomillado solo en el caso de que fallara la primera sentencia de la línea.

NOTAS:

Si en lugar de GD2 disponemos de GD1, no podremos utilizar la función imagecopyresampled() y deberíamos conformarnos con la función imagecopyresized() , que utiliza los mismos parámetros, lo malo es que ésta última da como resultado una imagen de calidad más pobre. A cambio, es mucho más rápida que la anterior.

Así si tenemos GD2, podemos usar la que más nos interese, si queremos CALIDAD y no nos importa el número de ciclos consumidos en el servidor,

imagecopyresampled();

en caso contrario:

imagecopyresized();

Si lo que queremos es crear imágenes “al vuelo”, sin guardarlas en ningún archivo (cosa poco recomendable si usamos la función de más calidad), el segundo parámetro de la función imagejpeg() no se debe de poner, quedando la llamada en el scritp que hay más arriba:

Código PHP:
imagejpeg($thumb);
Bueno, démonos cuenta que este script solo sirve para reducir imágenes de tipo JPEG, no de otro, para otros formatos, tan solo habría que cambiar un par de funciones por las correspondientes en los formatos que nos interesen.

Ejemplo:

imagecreatefromjpeg() por imagecreatefrompng() o imagecreatefromwbmp() o etc.

Share this Story

Related Posts

Hosting Perú

En Net Hosting Perú el servicio nunca se cae, contamos con sistemas de múltiples servidores automatizados totalmente redundantes que respaldan cualquier interrupción del servicio al instante.

Soporte Técnico Profesional Avanzado, estamos listos para resolver sus problemas rápida y profesionalmente las 24x7x365.

Somos mayoristas de Hosting ofrecemos más espacio y mayor transferencia a menores precios que la competencia.

Por qué hacemos esta garantía, porque usamos la tecnología de servidores más confiables disponible hoy en día.

NUESTRA DATA CENTER DE CLASE MUNDIAL

Nuestro proveedor Complex Drive está conectada a Seis (6) de los más grandes proveedores de banda ancha (de AT&T, Level3, Cox, Cogent, MCI / Verizon, Telepacific),