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.

PHP:
  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:

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

PHP:
  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

Total de Comentarios: 28

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

Enviar Comentario

(*)

(*)