Generar Thumbnails con PHP

  • 10/07/2007
  • 10:33 am
  • unijimpe

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.

  1. // incluimos la clase
  2. include("resize.php");
  3. // creamos un objeto tipo 'thumbnail'
  4. $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:

  1. include("resize.php");
  2. $thumb=new thumbnail("bigphoto.jpg");
  3. $thumb->size_width(200);
  4. $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.

  1. include("resize.php");
  2. $thumb=new thumbnail("bigphoto.jpg");
  3. $thumb->size_height(250);
  4. $thumb->jpeg_quality(80);
  5. $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

  • Uncategorized

Total de Comentarios: 42

Publicidad
19/07/2007
8:35 am

Muchas gracias por el tip de:

Image Resize Class

Andaba en busca de algo asi :)

luman
23/07/2007
12:41 am

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.

23/07/2007
1:13 am

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.

luman
23/07/2007
1:45 am

Yo suelo usar la siguiente función para redimensionar imágenes y sí puedo pasarle el archivo temporal.

http://snipplr.com/view/715/create-thumbs/

08/08/2007
9:09 pm

muchas gracias!!! es muy útil y ya combinandolo con otras cosas se pueden expandir mucho los horizontes XD

10/08/2007
12:51 am

No hay alguna forma de que haga un thumbnail de una imagen subida???

Pablo Quinteros
15/08/2007
8:52 pm

Como se hace si quiero guardar 2 imágenes una en chico y otra en grande?

Si repito la función me tira error

Stephanie
19/09/2007
8:24 pm

la libreria GD2 que tengo no soporta imagenes GIF, hay alguna otra forma de hacerlo?

gracias

20/09/2007
6:53 pm

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++ ;
}

19/11/2007
7:35 pm

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á?

Lokillo
10/01/2008
10:07 pm

No hay algún software que genere thumbnails sin tener que utilizar PHP??

02/02/2008
11:40 pm

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.

05/03/2008
7:28 pm

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á?

xfer
10/03/2008
3:10 pm

pino. tu codigo k hace para insertar 2 imagenes no funciona.

Matias
15/03/2008
11:53 am

A mi también me pasa lo de los caracteres extraños, alguien lo solucionó… ayuda!!!

alex
18/03/2008
12:17 pm

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..

12/04/2008
12:51 pm

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

12/04/2008
12:52 pm

“<img src=”thumb.php?image=../catalogo/&w=200″>”

27/04/2008
12:17 am

Al pelo funciona !!

15/05/2008
10:54 pm

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…

15/05/2008
11:52 pm

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

Screw
31/07/2008
11:13 am

Funciona perfectamente !!!

21/08/2008
8:02 pm

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);

TheTincho
26/08/2008
4:10 pm

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.

04/09/2008
11:40 pm

muy buena classe

castro
17/09/2008
3:02 pm

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

diego santella
29/09/2008
7:03 pm

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

diego santella
29/09/2008
7:04 pm

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

25/10/2008
10:15 am

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

Emle
25/10/2008
5:39 pm

Funciona de 1000000000000000000000000000000000000000000000000000000000000000000000000000000,1

01/11/2008
12:15 pm

hay alguien k pueda ayudarme con mi pregunta please….

Alberto
24/11/2008
2:15 pm

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

01/12/2008
1:28 pm

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

iSVai
11/01/2009
7:34 pm

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

19/01/2009
9:05 pm

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

coco
27/02/2009
2:17 pm

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.

Cynthia
06/03/2009
9:37 am

La Clase resize.php esta ahora en :

http://www.phpclasses.org/browse/file/4571.html

Saludos!

07/03/2009
6:20 pm

Gracias por el dato Cynthia, el archivo estaba perdido y ahora hay de donde descargarlo nuevamente.

gonzalo
26/03/2009
8:42 am

gracias Cynthia

06/04/2009
6:14 am

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!

15/04/2009
9:25 pm

lamentablemente el link de la class (txt) sirve, pero el documento esta totalmente vacio

Carlinho
21/04/2009
4:51 am

¿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

Enviar Comentario

(*)

(*)