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
- Screenshot Generator con PHP
- Crear PDF con Imagenes en PHP
- Generar PDF con PHP y MySQL
- PHP Feed Generator
- Uncategorized
Total de Comentarios: 42
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
hola, estoy creando mi web y quiero que los usuarios puedan subir sus fotos y comentarlas. todo lo que deciis parece muy interesante pero yo no entiendo casi nada ya que no tengo mucho conocimiento. es posible que me digais como hacerlo pero paso a paso, osea teniendo en cuenta que soy principiante en el tema…mil gracias y saludos
Funciona de 1000000000000000000000000000000000000000000000000000000000000000000000000000000,1
me da el siguiente error:
Fatal error: Cannot redeclare class thumbnail in /htdocs/public/resize.php on line 30
porque puede ser?? seria mucho pedir contestacion a mi email??
muchas gracias
hola amigo esta muy bueno tu post
para los que les interesa hacer esto de una forma mas facil aqui les dejo una url que encontre con esta info
http://www.puydi.net/blog/?p=543
es mas facil pero creo que los dos se pueden complementar.
aunque este es mas simple
Muy buen tutorial, como todos los que publicas.
Tan solo comento para agredecer e informar que el enlace para la descarga de la clase estaroto, al parecer ya nisquiera esta registrado ese dominio, aunque de cualquier forma buscando la clase en Google la encontre de inmediado, la dejo enseguida:
http://www.phpclasses.org/browse/file/5554.html
Saludos
si la clase es excelente, pero que pena que ya no este disponible.
iSVai
el enlace que pusiste no corresponde a la libreria esta es otra.
ojala si alguien la tenga la vuelva a subir
Holas, estoy trabajando con PHP5, instalé la extensión PHP_GD2.dll (quité la “;” en extension=php_gd2.dll ) pero me sale el Fatal error: Call to undefined function ImageCreateFromJPEG() in E:\Inetpub\wwwroot\Biblioteca\search4\resize.php on line 41. Por favor, agradeceré cualquier ayuda.
La Clase resize.php esta ahora en :
http://www.phpclasses.org/browse/file/4571.html
Saludos!
Gracias por el dato Cynthia, el archivo estaba perdido y ahora hay de donde descargarlo nuevamente.
gracias Cynthia
Hola!
Creo que todo lo hago correctamente y sin embargo, me indica que:
“Fatal error: Class ‘thumbnail’ not found in C:\Archivos de programa\EasyPHP 2.0b1\www\IPM\prueba.php on line 10″
Pk puede ser??? alguna idea??? (Tengo activados las librerias DG)
Gracias y continuad con este fantástico blog!
lamentablemente el link de la class (txt) sirve, pero el documento esta totalmente vacio
¿Por favor alguien tiene algun ejemplo que funcione?.
Yo use el que propone afperea pero no se porque no crea bien las miniaturas, puede ser porque se cargan la proporcion de las imagenes??
Eres un crack Unijimpe como siempre.
Saludos
