Redimensionando imágenes en php o como crear thumbnails
Una de las consultas típicas en los foros de PHP es como crear thumbnails a partir de una imagen, es decir, como crear una copia más pequeña de una imagen de forma automática.
Para realizar esta acción, es necesario que PHP se compile con soporte para la biblioteca GD. En la versión de Windows se debe descomentar la línea del php.ini que llama a la biblioteca, php_gd2.dll. En Linux, se requiere compilar php con la opción --with-gd; en Debian, habría que instalar el soporte para gd con apt-get install php4-gd o apt-get install php5-gd para php 4 y php 5, respectivamente, en tanto que en Gentoo habría que agregar en /etc/make.conf o en /etc/portage/package.use la opción gd.
En forma breve, el código de conversión es
<?php
$source="origen.png"; // archivo de origen
$dest="destino.png"; // archivo de destino
$width_d=100; // ancho de salida
$height_d=100; // alto de salida
list($width_s, $height_s, $type, $attr) = getimagesize($source, $info2); // obtengo información del archivo
$gd_s = imagecreatefrompng($source); // crea el recurso gd para el origen
$gd_d = imagecreatetruecolor($width_d, $height_d); // crea el recurso gd para la salida
// desactivo el procesamiento automatico de alpha
imagealphablending($gd_d, false);
// hago que el alpha original se grabe en el archivo destino
imagesavealpha($gd_d, true);
imagecopyresampled($gd_d, $gd_s, 0, 0, 0, 0, $width_d, $height_d, $width_s, $height_s); // redimensiona
imagepng($gd_d, $dest); // graba
// Se liberan recursos
imagedestroy($gd_s);
imagedestroy($gd_d);
?>
Como se darán cuenta, el código es un tanto engorroso, pero no es nada del otro mundo.
Para facilitarles el trabajo, cree una clase llamada ImageResize, la cual cuenta con varios métodos para crear un thumbnail a partir del alto, el ancho o el porcentaje del área. Esto último método es pertinente cuando quieren reducir el tamaño en función del tamaño del archivo
A continuación, les ofrezco una muestra "en vivo" del funcionamiento de la clase. Si necesitan más detalles, es cosa de hacer un comentario
Original
Tamaño: 200x225
Agradecimientos: Aguayoki, por sus comentarios sobre la instalación en debian.
| Adjunto | Tamaño |
|---|---|
| thumbs.tgz | 19.34 KB |
- 44210 lecturas

No estaría demás un par de líneas que detecten la disponibilidad de la librería GD:
if(!function_exists('gd_info'))
echo 'Libreria GD disponible';
else
echo 'Libreria GD no disponible';
Si necesitamos conocer las caracteristicas de la librería GD instalada se puede recurrir a la función gd_info().
http://cl.php.net/manual/es/function.gd-info.php
Raspu:
Sí, generalmente en los scripts se comprueba si se encuentra instalada gd, pero si ya se sabe que está, mejor ahorrarse el par de instrucciones.
Por supuesto, yo me refería a tomarlo como alternativa a phpinfo() para ver si está instalada y que caracteristicas tiene disponible (sacándome los pillos jajajaja).
<offtopic>
¿Has tenido alguna vez la oportunidad de navegar por tu sitio usando ?pera (Wintendo) y el srcoll del mouse?. Luego de hacer un click en cualquier parte de la página el scroll del mouse ya no tiene utilidad para desplazarse por la página. Sin embargo vuelve a ser "mouse-scrolleable" al hacer click sobre algún campo del formulario. ¿Curioso no?
</offtopic>
No sólo en wintendo, sino también en Linuxtion. Puede ser que algunos fallos en el xhtml lo vuelva loco al pobre Opera.
Raspu:
No se disculpe, si su consejo fue de lo más razonable.
La otra alternativa a gd_info y phpinfo() es usar, en la línea de comando
php -m, que permite ver con cuales módulos fue compilado php.Me fue util este codigo por eso doy gracias al creador. Pero solo aconcejo que en la linea de codigo: IMAGETYPE_JPG=>'imagecreatefromjpg',
se cambie por:
IMAGETYPE_JPEG=>'imagecreatefromjpeg',
A mi recien me funciono, pero gracias de todos modos
Razón tener
Al final quedó
IMAGETYPE_JPG=>'imagecreatefromjpg',
IMAGETYPE_JPEG=>'imagecreatefromjpeg',
Subiré el archivo con el arreglo.
Hola oye estoy ocupando tu codigo pero me marcan estos errores....Mi trabajo es crear una galeria de imagenes...¿me podrias ayudar? te lo agradeceria mucho saludos
Warning: getimagesize(C:\Inetpub\wwwroot\images\jpeg) [function.getimagesize]: failed to open stream: No such file or directory in C:\Program Files\xampp\htdocs\hemsa\archivos\New2.php on line 6
Warning: imagecreatefromjpeg(C:\Inetpub\wwwroot\images\jpeg) [function.imagecreatefromjpeg]: failed to open stream: No such file or directory in C:\Program Files\xampp\htdocs\hemsa\archivos\New2.php on line 7
Warning: imagecopyresampled(): supplied argument is not a valid Image resource in C:\Program Files\xampp\htdocs\hemsa\archivos\New2.php on line 13
Warning: imagejpeg() [function.imagejpeg]: Unable to open 'C:\documents and settings' for writing in C:\Program Files\xampp\htdocs\hemsa\archivos\New2.php on line 14
Warning: imagedestroy(): supplied argument is not a valid Image resource in C:\Program Files\xampp\htdocs\hemsa\archivos\New2.php on line 16
El problema principal es que no le estás dando un nombre de archivo válido. Fíjate en el primer error.
Tengo un problema con esta clase. Me sube y redimensiona los archivos aparentemente correctamente. He desarrollado un visor con flash para mostrar estas imágenes y no me funciona. Probando, decidi bajarme las imagenes creadas con esta clase y al intentar abrirlas con photoshop me dio el siguiente error:
Se ha encontrado un tipo de marcador JPEG desconocido o no valido.
Creo que debido a esto flash no reconoce las imágenes a las que intento acceder.
Alguien sabria como ayudarme? estoy un poco desesperado
Gracias!
Saludos. VíC
hola solo quiero saber donde puedo bajar un manual de xampp en españo o en ingles ya qeu quiero saber que otras aplicaciones se pueden realizar ya que e podido crear bases de datos y noda mas y quiero explorar todas sus herramientas que tiene.
beuno espero que me puedan ayudar y gracias por su atencion
Obrigado.. boa ajuda!
A mí no me funciona me da el siguiente error:
Warning: imagepng() [function.imagepng]: Unable to open 'tux_thumb.png' for writing in /home/serverphp/public_html/thumbs/imageresize.class.php on line 86
Parece que no tienes los permisos de escritura para el directorio thumbs. Haz un chmod 777 y ve que pasa.
Hola,
hay alguna forma de redimensionar GIF animados?
tengo varias funciones muy parecidas que me sirven para redimensionar
imagenes estaticas, pero no he logrado nada con las animandas..
alguna idea??
gracias!!
Fantástico, me ha sido muy útil.
Muchas gracias.
Oye te recomiendo que busques aqui:
http://www.apachefriends.org/
Por ahi debes encontrar algo que te sirva
hola como estan quisiera saber si se podria ocupar esta clase pero sin guardar la imagen en un archivo de destino sino mostrarla directo???
Hola!!!
TEngo una duda sobre los thumbnails.
Siempre que voy a mostrar la imagen me sale contenido textual, me han comentado que es por los headers, pero están bien.
Si en cambio queiro copiar la imagen, simplemente no lo hace. no da error ni nada.
Alguien tiene alguna idea?
Un saludo!!
Da lo mismo es del servidor.. he probado en otro y funciona.
gracias de todas formas!
Me ha parecido genial este tutorial.
Enhorabuena.
Buenas.
Antes de ver esta página ya había utilizado la misma técnica buscando aquí y buscando allá. Pero llegué a esta página intentando lograr que NO GRABE los thumbnails en el servidor, sino que solo los envíe al .HTM sin grabarlos en el servidor.
Antes utilizaba dos carpetas: Una con las imágenes y la otra con los thumb, pero son demasiados archvos por galería y es doble información.
Hice una función que general el thumbnail en base a la carpeta de imágenes, pero graba los thumbnails y quedamos en la misma, solo que esta vez no hospedo los thumbnails sino que se crean en el mismo servidor.
Puedo desplegar el thumbnail sin grabarlo en el servidor, pero solo logro hacerlo con uno de ellos y en puro PHP porque, debido a que usa el Header Content image/jpeg, solo se puede desplegar uno y no se puede hacer dentro del HTM porque va antes de cualquier entrada.
¿Cómo solvento lo de los Headers?
¿Cómo se hace para que envíe los thumbs al navegador SIN QUE LOS GRABE EN EL SERVIDOR?
Pueden ver el funcionamiento de la galería en http://www.guarowest.com. En la página de Resultados están las galerías fotográficas generadas con esta técnica. Recuerden que cada vez que entra un usuario se generan todos los thumbnails aunque ya estén generados, grabándose encima de los que ya están.
Disculpen la extensión pero quería hacer un buen planteamiento.
Antonio
agarrido@cantv.net
Cabudare - Venezuela
Toda la razón. Muchas gracias.
Excelente, felicidades al creador trabaja de primera! muy bien!
Enviar un comentario nuevo