Redimensionando imágenes en php o como crear thumbnails

Enviado por clbustos el Mié, 03/05/2006 - 00:16.
Clasificado en:

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_dfalse);
// hago que el alpha original se grabe en el archivo destino
imagesavealpha($gd_dtrue);
imagecopyresampled($gd_d$gd_s0000$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

Por ancho y largo
Por ancho
Por alto
Por porcentaje de area
Ancho:
Alto:
Porcentaje:

Agradecimientos: Aguayoki, por sus comentarios sobre la instalación en debian.

AdjuntoTamaño
thumbs.tgz19.34 KB
Imagen de Mr. Raspu

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

Enviado por Mr. Raspu (no verificado) el Jue, 04/05/2006 - 01:40.
Imagen de clbustos

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.

Enviado por clbustos el Jue, 04/05/2006 - 02:01.
Imagen de Mr. Raspu

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

Enviado por Mr. Raspu (no verificado) el Jue, 04/05/2006 - 02:27.
Imagen de Mr. Raspu

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

Enviado por Mr. Raspu (no verificado) el Jue, 04/05/2006 - 02:34.
Imagen de clbustos

No sólo en wintendo, sino también en Linuxtion. Puede ser que algunos fallos en el xhtml lo vuelva loco al pobre Opera.

Enviado por clbustos el Jue, 04/05/2006 - 14:46.
Imagen de clbustos

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.

Enviado por clbustos el Jue, 04/05/2006 - 14:48.
Imagen de Marco

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

Enviado por Marco (no verificado) el Mar, 05/09/2006 - 10:55.
Imagen de clbustos

Razón tener

Al final quedó


IMAGETYPE_JPG=>'imagecreatefromjpg',
IMAGETYPE_JPEG=>'imagecreatefromjpeg',

Subiré el archivo con el arreglo.

Enviado por clbustos el Mar, 05/09/2006 - 23:58.
Imagen de janeth

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

Enviado por janeth (no verificado) el Vie, 03/11/2006 - 19:32.
Imagen de clbustos

El problema principal es que no le estás dando un nombre de archivo válido. Fíjate en el primer error.

Enviado por clbustos el Vie, 03/11/2006 - 21:19.
Imagen de vicvallo

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

Enviado por vicvallo el Mié, 10/01/2007 - 07:49.
Imagen de esteban

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

Enviado por esteban (no verificado) el Mar, 10/04/2007 - 17:31.
Imagen de Perejilillo desconocido

Obrigado.. boa ajuda!

Enviado por Perejilillo desconocido el Jue, 23/08/2007 - 13:42.
Imagen de Perejilillo desconocido

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

Enviado por Perejilillo desconocido el Lun, 17/09/2007 - 09:01.
Imagen de clbustos

Parece que no tienes los permisos de escritura para el directorio thumbs. Haz un chmod 777 y ve que pasa.

Enviado por clbustos el Lun, 17/09/2007 - 11:57.
Imagen de Perejilillo desconocido

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

Enviado por Perejilillo desconocido el Jue, 20/09/2007 - 14:01.
Imagen de Yllelder

Fantástico, me ha sido muy útil.

Muchas gracias.

Enviado por Yllelder (no verificado) el Mié, 24/10/2007 - 12:11.
Imagen de Filtro56

Oye te recomiendo que busques aqui:
http://www.apachefriends.org/
Por ahi debes encontrar algo que te sirva

Enviado por Filtro56 (no verificado) el Vie, 09/11/2007 - 18:53.
Imagen de Juan Carlos Gonzalez Ulloa

hola como estan quisiera saber si se podria ocupar esta clase pero sin guardar la imagen en un archivo de destino sino mostrarla directo???

Enviado por Juan Carlos Gonzalez Ulloa (no verificado) el Sáb, 10/11/2007 - 23:01.
Imagen de sia

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

Enviado por sia (no verificado) el Dom, 27/01/2008 - 16:31.
Imagen de Perejilillo desconocido

Da lo mismo es del servidor.. he probado en otro y funciona.

gracias de todas formas!

Enviado por Perejilillo desconocido (no verificado) el Dom, 27/01/2008 - 16:40.
Imagen de Tonio

Me ha parecido genial este tutorial.
Enhorabuena.

Enviado por Tonio (no verificado) el Lun, 14/04/2008 - 08:25.
Imagen de Yoled

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

Enviado por Yoled (no verificado) el Jue, 15/05/2008 - 18:52.
Imagen de segma
Lo has puesto justo al revés, así mejor
  1.  <?php
  2.  if(function_exists('gd_info'))
  3.  echo 'Libreria GD disponible';
  4.  else
  5.  echo 'Libreria GD no disponible';
  6.  ?>
Enviado por segma (no verificado) el Mié, 07/10/2009 - 11:47.
Imagen de clbustos

Toda la razón. Muchas gracias.

Enviado por clbustos el Mié, 07/10/2009 - 15:37.
Imagen de Perejilillo desconocido

Excelente, felicidades al creador trabaja de primera! muy bien!

Enviado por Perejilillo desconocido (no verificado) el Vie, 19/03/2010 - 02:39.

Enviar un comentario nuevo

El contenido de este campo se mantiene como privado y no se muestra públicamente.
If you have a Gravatar account, used to display your avatar.
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Saltos automáticos de líneas y de párrafos.

Más información sobre opciones de formato