Posts Tagged ‘GD’

marzo 1, 2010 0

Generando thumbnails con PHP

By in Librerías, PHP

Ya hemos visto en este blog como usar algunas de las funciones de la librería GD. Hoy le va a tocar el turno a la función imagecopyresampled, que nos va a permitir escalar una imagen. El código para generar el thumbnail mediante esta función es el siguiente:

<?php
define('ANCHO', 100);
$image_path = $_GET['i'];

// Cargamos la imagen original
$original = imagecreatefromjpeg($image_path);

// obtenemos el ancho y el alto
$original_x = imagesx($original);
$original_y = imagesy($original);

// calculamos el nuevo alto de la imagen, para que guarde la relación
// de aspecto
$alto_destino = round($original_y * ANCHO / $original_x, 0);

// creamos la imagen del thumbnail
$destino = imagecreatetruecolor(ANCHO, $alto_destino);

// copiamos la imagen original y la escalamos
imagecopyresampled($destino, $original, 0, 0, 0, 0, ANCHO, $alto_destino, $original_x, $original_y);

// mostramos la imagen del thumbnail
header('Content-Type: image/jpeg');
imagejpeg($destino);

// destruimos las imagenes
imagedestroy($destino);
imagedestroy($original);

Podríamos modificar este script para que guardara los thumbnails en un directorio, y si ya existe no haría falta volver a generarlo, pero eso lo dejamos mejor como pequeña práctica.

Comparte esta entrada:
Delicious Digg Google Technorati Menéame Fresqui Reddit Facebook Twitter Yahoo! Buzz MySpace Email BarraPunto

Tags: , , ,

junio 15, 2009 0

Mostrar imagenes desde un script en PHP

By in PHP

En ocasiones nos puede interesar generar una imagen desde un script en PHP (por ejemplo un gráfico o aplicarle el efecto polaroid que expliqué aquí hace poco). Para enviarla al navegador existen varias funciones de la librería GD dependiendo del formato que queramos, que son:

Función Formato
image2wbmp WBMP
imagegd2 GD2
imagegd GD
imagegif GIF
imagejpeg JPEG
imagepng PNG
imagexmb XBM

Estas funciones nos pueden servir también para guardar la imagen en un archivo, pasándole el nombre de este, y nos permiten algunos parámetros adicionales como puede ser la calidad de la imagen, aunque esto último varía dependiendo del formato.

Lo que tenemos que hacer es enviarle al navegador la cabecera ‘Content-Type’ con el MIME Type del formato que queramos y después llamar a alguna de estas funciones indicándole un recurso de imagen. Aquí un pequeño ejemplo que carga una imagen llamada ‘imagenx.jpg’, donde x es un valor que se pasa como parámetro al script:

<?php
//El nombre de la imagen
$nombreImagen = 'imagen'.$_GET['id'].'.jpg';
//Cargamos la imagen en formato JPEG
$imagen = imagecreatefromjpeg($nombreImagen);
//Enviamos la cabecera Content-Type
header('Content-Type: image/jpeg');
//Enviamos la imagen al navegador
imagejpeg($imagen);
//Destruimos la imagen
imagedestroy($imagen);
?>

Además de usar la función imagejpeg hemos usado la función imagecreatefromjpeg, que carga la imagen a partir de un fichero JPEG. Lo mejor, como siempre recomiendo, es mirar la documentación de GD, donde vienen explicadas todas las funciones de esta librería.

Comparte esta entrada:
Delicious Digg Google Technorati Menéame Fresqui Reddit Facebook Twitter Yahoo! Buzz MySpace Email BarraPunto

Tags: ,

junio 14, 2009 2

Efecto polaroid con PHP y GD

By in PHP

Hoy vamos a ver una función que nos permite aplicarle un efecto polariod a una imagen.

La función es:

<?php
/**
 * Función para aplicar el efecto polaroid a una imagen.
 *
 * @param string $path Ruta de la imagen
 * @param float $giro Angulo de giro de la imagen
 * @param int $rfondo componente rojo del color de fondo
 * @param int $gfondo componente verde del color de fondo
 * @param int $bfondo componente azul del color de fondo
 * @return resource imagen con el efecto polaroid aplicada 
 */
function efectoPolaroid($path, $giro, $rfondo, $gfondo, $bfondo)
{
	// Cargamos la imagen a la que queremos aplicar el efecto polaroid
	$imgBase = imagecreatefromjpeg($path);
	//Creamos una nueva imagen.
	$img = imagecreatetruecolor(imagesx($imgBase) + 25, imagesy($imgBase) + 65);
	$blanco = imagecolorallocate($img, 255,255,255);

	//Rellenamos la nueva imagen de blanco
	imagefill($img,0,0, $blanco);

	//Copiamos la imagen a la que queremos aplicar el efecto polariod en nuestra nueva imagen.
	imagecopy($img, $imgBase, 11, 11, 0, 0, imagesx($imgBase), imagesy($imgBase));

	//Eliminamos nuestra imagen de memoria, ya que ya no hace falya
	imagedestroy($imgBase);

	//Color del borde
	$color = imagecolorallocate($img, 192,192,192);
	//Le ponemos un borde gris a nuestra imagen.
	imagerectangle($img, 0,0, imagesx($img)-4, imagesy($img)-4, $color);

	//Colores para la sombra
	$gris1 = imagecolorallocate($img, 208,208,208);
	$gris2 = imagecolorallocate($img, 224,224,224);
	$gris3 = imagecolorallocate($img, 240,240,240);

	//Le añadimos una pequeña sombra
	imageline($img, 2, imagesy($img)-3, imagesx($img)-1,imagesy($img)-3,$gris1);	
	imageline($img, 4, imagesy($img)-2, imagesx($img)-1,imagesy($img)-2,$gris2);	
	imageline($img, 6, imagesy($img)-1, imagesx($img)-1,imagesy($img)-1,$gris3);	
	imageline($img, imagesx($img)-3, 2, imagesx($img)-3,imagesy($img)-4,$gris1);	
	imageline($img, imagesx($img)-2, 4, imagesx($img)-2,imagesy($img)-4,$gris2);	
	imageline($img, imagesx($img)-1, 6, imagesx($img)-1,imagesy($img)-4,$gris3);

	//Rotamos la imagen
	$fondo = imagecolorallocate($img, $rfondo, $gfondo, $bfondo);
	$rotatedImg = imagerotate($img, $giro, $fondo);

	//Destruimos la imagen con la que hemos estado trabajando
	imagedestroy($img);

	//Devolvemos la imagen rotada
	return $rotatedImg;
}
?>

Aplicando la función a la siguiente imagen, con angulo de rotación -25º y color de fondo blanco:

imagen para aplicarle el efecto polaroid

imagen para aplicarle el efecto polaroid

Nos queda esta otra:

Imagen con efecto polariod

Imagen con efecto polariod

Ahora la descarga del archivo con la función con el efecto polaroid:

Código con la función del efecto polaroid

Comparte esta entrada:
Delicious Digg Google Technorati Menéame Fresqui Reddit Facebook Twitter Yahoo! Buzz MySpace Email BarraPunto

Tags: , ,