Generar Thumbnails con PHP

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 imagen para están disponibles los siguientes métodos:

  • size_width(ancho): Asigna el ancho de la imagen.
  • size_height(alto): Asigna 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 browser, 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.

Actualización

La página del autor original ya no esta disponible, pero la clase la pueden descargar en: http://www.phpclasses.org/browse/file/4571.html. Gracias a nuestros visitantes por el dato.

Comentarios Total 74 comentarios

unijimpe
Publicado: 02/02/2010 12:43 pm

El uso de esta clase es recomendable para cuando haces upload de imágenes, con lo cual generas dinámicamente el thumbnail, esto se hace una sola vez por imagen con un gran ahorro de consumo de CPU.

La otra forma es utilizarlo para mostrar thumbnails de imágenes que ya existen en el servidor, para ello se puede crear un archivo php que se encargue de generar el thumbnail e imprimirlo, luego desde el html normal se puede llamar al php de la siguiente forma.

<img src="thumb.php" alt="Photo" />

La otra forma es hacer un PHP que reciba como parámetro el nombre del archivo de imagen del cual se desea generar el thumbnail, luego se genera la imagen pequeña y la imprime, luego podríamos mostrar la imagen de la forma:

<img src="thumb.php?file=bigphoto.jpg" alt="Photo" />

Con lo cual podemos mostrar el thumbnail sin problemas en cualquier página html.

alejandro loza
Publicado: 03/02/2010 7:17 pm

mira unijimpe descargue del link de cynthia (http://www.phpclasses.org/browse/file/4571.html) el archivo «resize.php» ese archivo…
para que sirve?
tiene que tener un comando o algo por el estilo para usarlo con «upload.php»?? (http://www.box.net/public/1u8roxq7yd)
tiene que trabajar en conjunto con «upload.php»??
en dnd pongo este archivo??

me seria de mucha ayuda que me des un empujoncito nada mas, se te agradecemucho

Gabriel
Publicado: 18/05/2010 11:03 am

a nivel SEO y optimización de una página web, esto de generar imagenes directamente en el cliente utilizando el show() como se lo traga google aunque se trate de thumbnail?

César Cancino
Publicado: 28/07/2010 4:43 pm

Compadre, qué te puedo decir, nuevamente me salvaste jejee…mira digo esto en serio..cualquier cosa en la que te pueda ayudar estamos a la orden, y mi web también…recibe un cordial saludo desde Santiago de Chile..

anton
Publicado: 03/08/2010 10:21 am

Para los que tienen el problema “Fatal error: Class ‘thumbnail’ not found».
Probad a iniciar el php con <?Php, en lugar de con <?
Php 5.x creo que requiere esta forma de iniciar.

Saludos

Erick
Publicado: 16/11/2010 12:24 pm

Gracias anton, al fin hice q funcionara esta bendita clase que me estaba dando problemas, ya me logra subir los thumbnails pero igual me manda un error:

Deprecated: Function ereg_replace() is deprecated in D:\wamp\www\angelitos\admin\pages\resize.php on line 10

esta es la linea 10:

$this->img[«format»]=ereg_replace(«.*\.(.*)$»,»\\1″,$imgfile);

por ahi estuve buscando y me entere que esa funcion ya no es valida desde el php 4.2.

haber si alguien tiene una solucion. gracias

César Cancino
Publicado: 07/01/2011 10:22 am

Hola he hecho un video sobre este tema pueden verlo desde
http://www.cesarcancino.com/VideoTutorial-22-del-Curso-de-PHP-POO-n183.html

muchas gracias por tus siempre excelentes aportes…

Arturo
Publicado: 27/02/2011 11:08 pm

Gracias me fue de mucha utilidad para un script, gracias y buen trabajo!

Cosme
Publicado: 05/03/2011 12:19 pm

Hola.- Buenas Tardes.- Les hago una consulta, estoy utilizando el script mencionado, el problema es que al subir varios archivos si uno de los campos INPUT esta vacio emite el error de «Not Supported File»

¿Como hay que hacer para que si no encuentra el archivo no emita el error?

Gracias

Roberto
Publicado: 13/04/2011 1:15 am

Agregue a esta clase el metodo specific_size(), para poder pasar un ancho y un alto fijos y que sea proporcional el resize como con size_width o size_height. Lo comparto.

function specific_size($width, $heigth)
{
//width y heigth
$this->img[«lebar_thumb»]=$width;
$this->img[«tinggi_thumb»]=$heigth;
}

Jonathan
Publicado: 05/07/2011 2:57 pm

Para los que tienen problemas por que la nueva versión de PHP, solo hay que modificar la función ereg por preg, y quedaría así:

cambien esta linea

$this->img[«format»]=ereg_replace(“.*\.(.*)$”,”\\1″,$imgfile);

por esta otra

$this->img[«format»]=preg_replace(«/.*\.(.*)$/i»,»\\1″,$imgfile);

cesar
Publicado: 01/08/2011 4:09 pm

Hola, veo q la calidad del jpg resultante es un poco mala, alguna solución?

unijimpe
Publicado: 01/08/2011 10:05 pm

Puedes asignar la calidad de la imagen resultante con el método jpeg_quality, el cual recibe como parámetro un número de 1 a 100 que expresa la calidad de la imagen:

$thumb->jpeg_quality(85);

Jobink
Publicado: 10/09/2011 1:11 am

Solución a Fallos:

– A los que les sale caracteres extraños y eso de Cannot redeclare class thumbnail es porque están copiando más de un bloque de códigos. Realizan doble o triple llamado a la clase. Recomendación leer un poco el post y con calma copiar el código que se utilizará.

– Fatal error: Class ‘thumbnail’ not found in: Fíjense si existe la carpeta o directorio al que quieren subir por ejemplo si tienen: $thumb->save(«thumbs/photo.jpg»); fíjense si tienen el directorio thumbs y si la ruta es la correcta a lo mejor podría ser $thumb->save(«../thumbs/photo.jpg»); u otra.

Encuentro un problema al intentar redimensionar una foto en jpg grande. Al redimensionarla la imagen sale de baja calidad aún dandole calidad 100.

Saludos y buen aporte.

Jesús
Publicado: 10/09/2011 5:49 am

Buen artículo que sigue teniendo su valor, 1saludo.

Jonatan
Publicado: 29/09/2011 9:51 am

tengo que tener algo activado para que funcione?? porque no me funciona, me tira un error, dice: No se pudo mostrar la imagen «ruta del archivo» porque contiene errores. Si alguien me puede ayudar, gracias..

Eva
Publicado: 08/11/2011 3:45 am

que tamaño de foto máximo soporta resize.txt?

Erwin Zarria
Publicado: 20/11/2011 10:49 pm

Excelente post! Tuve que hacer algunos ajustes a la versión original (en base a todo lo dicho aquí) pero finalmente funciona a la perfección. Saludos desde Perú.

Hans
Publicado: 09/12/2011 2:01 pm

El archivo JPG lo subo perfectamente al servidor pero cuando cuando quiero hacer la imagen pequenia, me sale el error.
ya probé de todo y me dice Not Supported File
Ayuda!!!!

Mi codigo simple y sencillo para que se entienda:

require(«resize.php»);

move_uploaded_file($_FILES[‘photo’][‘tmp_name’], $target_path );

// en este código ya probé «tmp_name» y solo «name» y no funciona nada
$thumb=new thumbnail($_FILES[‘photo’][‘tmp_name’]);

$thumb->size_width(100);
// $thumb->size_height(100);
$thumb->jpeg_quality(50);
$thumb->save(«nueva.jpg»);

jose
Publicado: 27/08/2012 5:31 pm

hola una duda a mi no me guarda la imagen en la ruta que le especifico, para ver que llevaba el objeto thumb lo imprimi y en la opcion src como valor aparece «Resource #46» sera este el error que no permite guardarlo y si si alguien sabe porque

Kai
Publicado: 19/10/2012 11:39 am

Gracias por la informacion, es realmente buena para hacer que una web cargue más rapido.

tucuta
Publicado: 28/12/2012 6:11 pm

Hola Unjipe, el tutorial está bueno, y me he leído todos los comentarios, pero he llegado a un nuevo problema.

Ya hice el cambio que había dicho @Jonathan de cambiar:

$this->img[«format»]=ereg_replace(“.*\.(.*)$”,”\\1″,$imgfile);

por esta otra

$this->img[«format»]=preg_replace(“/.*\.(.*)$/i”,”\\1″,$imgfile);

Pero resulta que ahora me tira el siguiente error:

Warning: imagejpeg(): Filename cannot be empty in D:\www\www\www.social-posting.com\template\resize\new\thumb.php on line 107

Lo único que he hecho es copiar el codigo del txt, cambiar la función y agregar php a <?.

Agradezco de antemano la ayuda que me puedan dar.

Saludos

Oscar Capdevila
Publicado: 17/04/2013 12:47 pm

Gracias por vuestra ayuda y en especial a Jonattan. Saludos

jdimas
Publicado: 19/02/2014 3:20 pm

Me sirvió mucho la class. gracias.

 

Comentar

En este blog los comentarios están moderados, serán mostrados cuando el administrador los apruebe. Por favor, evita comentarios ofensivos u obscenos por que no serán aprobados.
Si deseas publicar código fuente debes hacerlo entre las etiquedas <code> y </code>, además debes reemplazar los carácteres < por &lt; y > por &gt;.

(Requerido)

(Requerido, no será publicado)

(Requerido)

(Tags aceptados: <a> <em> <strong> <code> <ul> <li>)