Generar Thumbnails con PHP
- 10/07/2007
- 10:33 am
Redimensionar imágenes dinámicamente es una de las tareas que se presentan a menudo en el desarrollo web, en esta ocasión les presentamos una clase en PHP que les permitirá redimensionar sus imágenes de manera sencilla y muy rápida.
Image Resize Class es una sencilla clase escrita en PHP el cual permite crear thumbnails de imágenes de forma dinámica, detecta automáticamente la extensión de la imagen (.jpg/jpeg, .png, .gif, .wbmp), se puede definir la calidad del JPG.
Crear un Thumbnail
Lo primero es descargar la clase resize.txt y guardarla como resize.php para utilizarla posteriormente. A continuación creamos un nuevo archivo php e incluimos una referencia a la clase, y seguidamente creamos un objeto del tipo thumbnail, para inicializar esta clase se pasamos como parámetro la ruta de la imagen a redimensionar.
-
// incluimos la clase
-
include("resize.php");
-
// creamos un objeto tipo 'thumbnail'
-
$thumb=new thumbnail("bigphoto.jpg");
Una vez creado el objeto ya estamos en condiciones de manipular la imágen para estan disponibles los siguientes métodos:
- size_width(ancho): Asigna el ancho de la imagen.
- size_height(alto): Asigan el alto de la imagen.
- size_auto(mayor): Asigna el mayor alto o ancho.
- jpeg_quality(calidad): Asigna la calidad del JPG (0-100).
- show(): Muestra el thumbnail generado.
- save("file"): Guarda el thumbnail en la ruta 'file'.
Luego si deseamos redimensionar nuestra imagen a un ancho de 200 pixels y luego mostrarlo en el broser, el código sería de la forma:
-
include("resize.php");
-
$thumb=new thumbnail("bigphoto.jpg");
-
$thumb->size_width(200);
-
$thumb->show();
Ahora si lo que deseamos en redimensionar la imagen a un alto de 250 pixels, obtener la nueva imagen a 80 de calidad y finalmente guardar este thumbnail generado en la carpeta thumbs y renombrandolo a photo.jpg.
-
include("resize.php");
-
$thumb=new thumbnail("bigphoto.jpg");
-
$thumb->size_height(250);
-
$thumb->jpeg_quality(80);
-
$thumb->save("thumbs/photo.jpg");
Definitivamente una clase muy sencilla de utilizar, esto lo podemos utilizar por ejemplo cuando un usuario hace uploads de imágenes para el cual generamos un thumbnail de la imagen que nos servirá como preview de la misma.
Posts Relacionados
- Webthumb: Web ScreenShots
- Crear PDF con Imagenes en PHP
- Generar PDF con PHP y MySQL
- PHP Feed Generator
- PDFs con fondo utilizando PHP
Total de Comentarios: 28
Muchas gracias por el tip de:
Image Resize Class
Andaba en busca de algo asi :)
No se puede pasar directamente la imagen subida a través de un form a la función? Es necesario copiarla en el servidor primero para luego crear la miniatura? Estoy haciendo pruebas con $thumb=new thumbnail($_FILES["imagen"]['tmp_name']); y obtengo error de fichero no soportado.
Efectivamente, lo que sucede es que $_FILES["imagen"]["tmp_name"] es un archivo temporal, el cual hay que verificar antes de copiarla a la ruta final, si es que no se copia este archivo será eliminado automáticamente.
Primero hay que copiar esta imagen para luego recién manipularla.
Yo suelo usar la siguiente función para redimensionar imágenes y sí puedo pasarle el archivo temporal.
muchas gracias!!! es muy útil y ya combinandolo con otras cosas se pueden expandir mucho los horizontes XD
Como se hace si quiero guardar 2 imágenes una en chico y otra en grande?
Si repito la función me tira error
la libreria GD2 que tengo no soporta imagenes GIF, hay alguna otra forma de hacerlo?
gracias
Saludos, muy util esta clase. Para el amigo que pregunta como genera dos imagenes de una sola vez le comento que yo lo hice así:
$thumb=new thumbnail($path.$img_name);
$cont=1;
while ($cont size_auto(300);
$thumb->jpeg_quality(80);
$thumb->save($path.$img_name);
}elseif($cont == 2){
//Imagen PEqueña
$thumb->size_auto(80);
$thumb->jpeg_quality(80);
//Cambias el directorio $pathThumb que sería otro
//directorio para guardar la imagen, si es el mismo, //lo dejas igual
$thumb->save($pathThumb.$img_name);
}
$cont++ ;
}
Solo obtengo caracteres extraños:
ÿØÿà�JFIF������ÿþ�;CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), quality = 75 ÿÛ�C� $.’ “,#(7),01444’9=82<.342ÿÛ�C 2!!22222222222222222222222222222222222222222222222222ÿÀ��È�È”�ÿÄ����������� ÿÄ�µ���}�!1AQa”q2‘¡#B±ÁRÑð$3br‚.
tengo la librería GD activada. Que será?
No hay algún software que genere thumbnails sin tener que utilizar PHP??
Yo en mi caso no obtengo nada de nada…
Gd 2.0.28 instalado y funcionando.
Path real en el save:
$carpetanueva = ABSPATH . "web/albums/album-name/thumbs/";
$thumb->save($carpetanueva.$archivo);
¿Alguna idea?
Gracias, saludos.
estoy realizando una copia en miniatura en formato PNG, y cuando subo le asigno alto y ancho mayor que 20 las sube en blanco y negro…
Que será?
pino. tu codigo k hace para insertar 2 imagenes no funciona.
A mi también me pasa lo de los caracteres extraños, alguien lo solucionó… ayuda!!!
A mi también me saca los dichosos caracteres, ¿y que será?, a ver si alguien lo soluciona y nos lo comenta por que sucede esto… Por que no paro de darle vueltas pero nada..
estimados colegas, me podrian dar una mano.. estoy probando la class que lei en este sitio pero tambien asi como a Pedro Chacin, me sale la pantalla con codigos extranios
me gustaria saber como puedo usar esta class entre un tag html y redimencionar
Lo de los codigos extraños sale seguramente por que la base de datos le falta configurar el tipo de caracteres… Suponiendo que estamos en phpmyadmin y elegimos la estructura de una tabla nos fijamos en la parte que dice COTEJAMIENTO, cambiemosle por la que dice “latin1_swedish_ci” aver que pasa…
si no es lo anterior por lo del problema de los codigos extraños entonces aumenten en el script
Header(”Content-type: image/jpeg”);
en la parte superior y cuentan como os fue
Funciona perfectamente !!!
Dentro de un while donde se leen todas las imagenes de una carpeta como le paso los parametros de cada foto? este seria el codigo:
//configuracion del scrpit
$ancho_preview = 80;
$calidad= 80;
$directorio = “./imagenes/”;
$extensiones = array(”gif”,”jpg”,”png”);
$directorioGuardar = “./miniaturas/”;
// comprobaciones basicas para verificar que el directorio existe y que se puede abrir
if(is_dir($directorio) && $dir = opendir($directorio)){
echo “dentro del if”;
//entraremos dentro del bucle para leer los archivos que contiene
while (($nombre_archivo = readdir($directorio)) !== false){
echo $nombre_archivo.”dentro del while”;
$thumb=new thumbnail($nombre_archivo);
$thumb->size_height(80);
$thumb->jpeg_quality(80);
$thumb->save($directorioGuardar.$nombre_archivo);
}
}
closedir($directorio);
El problema con los caracteres extraños es que tienen espacios de mas al final del archivo. Chequeen que no haya espacios ni saltos de linea luego de “?>” en el archivo de la clase.
es muy buena clase, pero tengo un detalle genero dos imagenes apartir de una, el problema es que no me respeta las medidas que le pongo, no se a que se deba. Espero su opinion.
Salu2
Estimados para generar dos imagenes iguales de distintos tamaños solo tienen que llamar otra instancia, de la clase les dejo mi codigo que sube una imagen, y la guarda en dos tamaños, felicitaciones unijimpe y muchas gracias esto me vino barbaro.saludos
size_width(200);
$thumb->save(”th”.time().$HTTP_POST_FILES['archivo']['name']);
$thumb->show();
$thumb2=new thumbnail($HTTP_POST_FILES['archivo']['name']);
$thumb2->size_width(400);
$thumb2->save(”lar”.time().$HTTP_POST_FILES['archivo']['name']);
$thumb2->show();
echo “El archivo subio con exito”;
} else {
echo “El archivo no cumple con las reglas establecidas”;
}
die();
}
?>
Archivo
salio cortado va de nuevo :
size_width(200);
$thumb->save(”th”.time().$HTTP_POST_FILES['archivo']['name']);
$thumb->show();
$thumb2=new thumbnail($HTTP_POST_FILES['archivo']['name']);
$thumb2->size_width(400);
$thumb2->save(”lar”.time().$HTTP_POST_FILES['archivo']['name']);
$thumb2->show();
echo “El archivo subio con exito”;
} else {
echo “El archivo no cumple con las reglas establecidas”;
}
die();
}
?>
Archivo

