¡Hola, bienvenidos nuevamente al Taller de PHP! La clase anterior vimos cómo subir imágenes a nuestro sitio a través de un formulario, en la clase de hoy lo que vamos a hacer es aprender a manipular esas imágenes para generar una imagen más pequeña, llamada thumbnail.
Para poder manipular imágenes vamos a necesitar que nuestro servicio de hosting tenga instalada la libreria LibraryGD, no se preocupen igual ya que la mayorÃa de los servidores de hoy en dÃa la incluyen, incluso si instalaron Xampp en sus computadoras también lo tienen.
Generando imágenes
Antes que nada guardamos en una variable la dirección absoluta (la que expliqué en la clase anterior) a la imagen de origen, por ejemplo, si tenemos en una variable $imagen con el nombre de la imagen y sabemos dónde se guardó, generamos una variable $archivo:
$archivo = "/var/www/elwebmaster.com/uploads/$imagen";
Una vez que tenemos el archivo, debemos corroborar que se trate de una imagen, y obtener la extensión, para ver si se trata de un gif, jpg, png, etc.
$separo = explode( '.', strtolower($imagen) );
$nombre = $separo[0];
$extension = $separo[1];
Con explode lo que hacemos es convertir en array un string, indicándole por que patrón queremos separar, en este caso lo separamos por un punto. Con strtolower lo que hacemos es llevar primero a minúsculas todo, asà cuando generemos nuevas imágenes se generan con nombres todos en minúsculas.
El array que se genera tiene por nombre $separo y tiene dos Ãndices 0 y 1, ya que cada imagen sólo tiene un único punto, por lo que separa el string en dos únicamente.
Luego de esto armamos un switch para ver qué tipo de extensión tiene el archivo y creamos una nueva imagen según la extensión que tenga.
switch( $extension ) {
case 'gif':
$imagen_src = imagecreatefromgif( $archivo );
break;
case 'jpg':
$imagen_src = imagecreatefromjpeg( $archivo );
break;
case 'png':
$imagen_src = imagecreatefrompng( $archivo );
break;
default:
trigger_error(”Formato de imagen no soportada!!!”, E_USER_ERROR);
}
Con imagecreatefrom* lo que hacemos es crear una nueva imagen desde la url absoluta de la imagen que queremos y nos devuelve el identificador a esa nueva imagen creada.
Luego, lo que hay que hacer es crear una nueva imagen true color del tamaño de la nueva imagen que queremos generar, por ejemplo, una imagen 100px de ancho por 120px de alto.
$imagen_dst = @imagecreatetruecolor(100, 120);
Utilizamos el @ antes de la función imagecreatetruecolor para evitar que se muestre un mensaje de error si es que no se puede llegar a generar la imagen en true color (ya que depende de la versión de php que tenemos instalado en el servidor).
Continuamos generándola normal si es que no se generó.
if ( empty($imagen_dst) ) {
$imagen_dst = imagecreate(100, 120);
}
Luego de esto tenemos que setearle el modo de blending a la imagen (para mejorar la calidad de la imagen que vamos a crear), para ello hacemos lo siguiente:
imagealphablending($imagen_dst, false);
Luego, tenemos que copiar la imagen original en el tamaño nuevo que queremos obtener, para ello utilizamos:
imagecopyresampled ( $imagen_dst , $imagen_src , int $dst_x , int $dst_y ,
int $src_x , int $src_y , int $dst_w , int $dst_h , int $src_w , int $src_h );
Con esta función lo que hacemos es pasarle como parámetros, la imagen blanca que generamos con el tamaño deseado (imagen de destino), luego la imagen creada a partir de la original, luego le indicamos qué punto x queremos dibujar en la imagen de destino, en nuestro caso va a ser 0, ya que vamos a reemplazar toda la imagen blanca por la nueva imagen. Luego, qué coordenada y de destino (dst_y), que también va a ser 0, a continuación a partir de que coordenada x del origen vamos a copiar, nuevamente es 0 ya que queremos copiar absolutamente toda la imagen, luego la coordenada y del origen (src_y). Finalmente le pasamos el ancho del destino, y el alto del destino (dst_w y dst_h) que va a ser el total de la imagen blanca generada anteriormente y el ancho del origen y el alto del origen, que también va a ser igual al ancho y alto de la imagen original.
Esto quedarÃa asÃ:
imagecopyresampled($imagen_dst,$imagen_src,0,0,0,0,100,120,
imagesx($imagen_src),imagesy($imagen_src));
Ahora generamos un nuevo nombre para la imagen recién generada y en que lugar la queremos guardar
$nueva_ruta = "/var/www/elwebmaster.com/uploads/{$imagen}-th.{$extension}";
Finalmente creamos la imagen definitiva que vamos a usar con imagejpeg y destruimos las imágenes generadas en el proceso para liberar memoria:
imagejpeg( $imagen_dst, $nueva_ruta );
imagedestroy( $imagen_src );
imagedestroy( $imagen_dst );
Espero que se haya entendido ¡hasta la semana que viene!
| << CLASE ANTERIOR |








Martes, 5 de Agosto de 2008 a las 13.34
Muy bueno el tutorial, pero hago una pregunta.
Al guardar una imagen a esta se la puede llamar “a.a.a.a.a.jpg” y sin problemas quedará asÃ.
El explode no servirÃa, lo que habrÃa que hacer es qeu tome el último Ãndice…
$extension = $separo[1];
SerÃa asÃ?:
$extension = $separo[count($separo)];
Saludos, muy bueno el tutorial, lo vengo siguiendo ^^.
Miércoles, 26 de Noviembre de 2008 a las 18.17
disculpen sabran de casualidad como generar reportes desde php a cvs o xls. lo que pretendo es generar un archivo de ese formato de lo que tengo desde la pagina en php y que dandole click en un boton me descarge un archivo ya sea .xls o .cvs
saludos y gracias.
Lunes, 22 de Diciembre de 2008 a las 11.37
hola roxana, te paso un link sobre exel y php http://www.codeplex.com/PHPExcel
Miércoles, 25 de Marzo de 2009 a las 23.20
hola como estan la verdad q es el mejor curso de php q hay visto y me encanta voy por la clase 28 y lo empece ayer asi como veran estoy re prendida en el pero me freno hoy con un error q me largo php y es el siguiente :
Warning: move_uploaded_file(C:\wamp\www\paola\uploads) [function.move-uploaded-file]:
failed to open stream:
Permission denied in C:\wamp\www\paola\contacto_script.php on line 31
creo q niega los permisos a la carpeta para q ingrese la foto ,, soy nueva en esto por eso es q le pregunto bueno los saludos a todos
Jueves, 26 de Marzo de 2009 a las 19.01
@Paola hola, efectivamente no encuentra la carpeta “C:\wamp\www\paola\uploads” o no tiene permisos para subir el archivo ahÃ. El error te lo está tirando en la linea 31 del archivo contacto_script.php
Lunes, 30 de Marzo de 2009 a las 20.14
tengo una consulta estoy creando un sitio pa dejar curriculums, y seria optimo incluir la foto, me explicarias un poco lo de las direcciones o ruta como se generarian para guardar cada foto de cada curriculum? por favor
Lunes, 15 de Junio de 2009 a las 20.59
Estoy haciendo un site, el cual dejo subir imagenes a los usuarios, mi pregunta es si es peligroso dar permisos 777 a la carpeta ?
Si bien chequeo que sea una imagen solamente para que no me suban scripts, me intriga eso, no pude hacerlo funcionar de otra forma que no sea 777 ya que una vez que subo la imagen desde el mismo script le achico proporcionalmente el tamaño por lo que el permiso 755 no me funciona.
gracias por sus comentarios.
Miércoles, 5 de Mayo de 2010 a las 13.00
bueno la verdad ing. aprendi muxo bueno no se si se podia publicar ejercicios de suma de fechas o incremento de dias auna fecha o formulario de vacaciones y cosas similares bueno gracias por lo aprendid
Lunes, 17 de Enero de 2011 a las 22.11
LibraryGD en Linux? Qué raro!
Y cómo se harÃa para utilizar ImageMagick y qué tal estarÃa?
Jueves, 10 de Marzo de 2011 a las 22.11
hola, como se podrÃa hacer para que las imágenes fueran de un servidor externo, algo como
$imagen_data=file_get_contents(”http://www.todosenrumba.com/img/logos/Apple_logo.png”);
es decir sin que sea un upload, ya que en la pagina que tengo solo se envia la ruta de la imagen.
saludos.
Lunes, 14 de Marzo de 2011 a las 16.30
Buen aporte, deberian colocar los ejercicios listo en zip para poder verificar los errores, asi como los hace el quique. que son muy ilustrativos
Jueves, 7 de Abril de 2011 a las 17.06
Hola
El curso está muy bueno y es my práctico.
Necesito saber como colocar colocar un icono del sitio que tengo programado en PHP
de manera que en el navegador salga el icono como suele suceder con sitios como facebook, gmail, yahoo y otros.
Gracias de antemano
Martes, 10 de Mayo de 2011 a las 20.55
Hola Walter Ramos,
has de crear la imagen que quieras visualizar como icono en tu página y nombrarla “favicon.ico”.
Luego la subes a la raÃz de tu sitio y ya está.
PD: Paola tiene razón, este es el mejor tutorial de .php que encontré.
Gracias!