Imágenes en PHP

El manejo de imágenes en PHP es muy sencillo. Sin embargo, la mayoría de las funciones de manejo de imágenes requieren la librería GD (según el manual de PHP).

Ejemplo simple

Para ilustrar el uso de las funciones de manejo de imágenes, el siguiente ejemplo crea una imagen muy sencilla:
<?php
$image = imageCreate($maxdimension,$maxdimension);
// allocate all required colors
$colorBG = imageColorAllocate($image, 192, 192, 192);
$colorTXT = imageColorAllocate($image, 0, 0, 255);
imageString($image, 5, 10, 40, "No Image", $colorTXT);
// create an interlaced image for better loading in the browser
imageInterlace($image, 1);
header("Content-type: image/png"); // Content type
imagePNG($image);
imagedestroy($image);
exit();
?>

Esto nos mostraría una imágen como la siguiente:

Ahora vamos a explicar que hacen cada una de las líneas del ejemplo.

La función imageCreate() recibe como parámetros los valores de ancho y alto (respectivamente) de la imágen que queremos crear. La función regresa un recurso de imagen, el cual asignamos a la variable $image.

Después de eso, debemos seleccionar los colores que queremos usar. Para eso, usamos la función imageColorAllocate(). Esta función recibe como parámetros: el recurso de imágen (en nuestro caso la variable $image) y las componentes de color RGB (un valor de 0-255 para R, otro para G y otro para B); es decir, los valores de rojo, verde y azul.
En el ejemplo anterior, seleccionamos solamente dos colores: un gris (192,192,192) para el fondo, el cual almacenamos en la variable $colorBG; y un azul (0,0,255) para el texto, el cual queda en la variable $colorTXT.

Luego agregamos un poco de texto a la imágen. Para ello usamos la función imageString(). Los parametros que espera esta función son: El recurso de imágen, la fuente (si se le manda un valor de 1 a 5, usa una fuente predeterminada), la posición en el eje X (el margen izquierdo es la posición 0), la posición en el eje Y (el margen superior es la posición 0) y el recurso de color en el cual queremos que escriba.

La función imageInterlace() cuando se genera una imágen de tipo GIF o PNG, permite que la imágen pueda mandarse a un navegador Web empezando como una imágen de baja resolución que va mejorando su calidad conforme carga.

Finalmente la función imagePNG() manda la imagen a la salida estándar, no sin antes indicar que lo que estamos enviando es una imágen. Esto lo logramos enviando el encabezado "Content-type: image/png" antes de enviar cualquier otra información.

Otras funciones

Si lo que se quiere es enviar un tipo de imágen distinto a PNG, se puede hacer con otras funciones, por ejemplo: imageGIF (requiere librerías de manejo de GIFs) o imageJPEG.

También hay muchas funciones para dibujo, como lo son: imageFill, imageFilledRectangle, imageRectangle, imageLine, imageArc, etc..

Abrir imágenes

Abrir una imágen ya existente puede presentar un inconveniente: la forma de abrirla depende del tipo de imágen del que se trata (por ejemplo: imageCreateFromGIF, imageCreateFromJPEG o imageCreateFromPNG). Por eso, es útil tener una función que abra cualquier tipo de archivo.

El siguiente código, basado en un comentario en la página de PHP, trata de determinar el tipo de archivo del que se trata y utiliza la función correspondiente.

Se basa en la función getimagesize, la cual regresa un arreglo del cual el elemento con índice 2 regresa un código dependiento del tipo de archivo. En caso de existir la función que abre ese tipo específico de archivo, lo abre. De lo contrario termina la ejecución.
<?php
// Esta funcion trata de determinar el tipo de archivo de imagen
// y lo abre
function imageCreateFromFile($filename)
{
static $image_creators;

if (!isset($image_creators)) {
$image_creators = array(
1 => "imagecreatefromgif",
2 => "imagecreatefromjpeg",
3 => "imagecreatefrompng",
6 => "imagecreatefromwbmp",
16 => "imagecreatefromxbm"
);
}

$image_size = getimagesize($filename);
if (is_array($image_size)) {
$file_type = $image_size[2];
if (isset($image_creators[$file_type])) {
$image_creator = $image_creators[$file_type];
if (function_exists($image_creator)) {
return $image_creator($filename);
} else {
die("imagecreatefrom: Function $image_creator doesn't exist!");
}
} else {
die("imagecreatefrom: Image type is not supported!");
}
} else {
die("imagecreatefrom: Not an array while calling getimagesize()!");
}
}
?>

Y ahora veamos otro ejemplo..
.. utiliza la función mencionada arriba y su objetivo es abrir una imágen especificada y generar una miniatura de la imágen. Para ello, nos basamos en la funcion imagecopyresized.
<?php
///////////////////////////////////////////////////////////
// Aqui empieza el codigo principal

// Content type
header("Content-type: image/png");

if(!isset($maxdimension)) $maxdimension = 100;

if(!isset($filename))
{
// No se encontro esa imagen. Crear una.
$image = imageCreate($maxdimension,$maxdimension);
// elegir colores
$colorBG = imageColorAllocate($image, 192, 192, 192);
$colorTXT = imageColorAllocate($image, 0, 0, 255);
// agregar un texto
imageString($image, 5, 10, 40, "No Image", $colorTXT);
// entrelazar la imagen
imageInterlace($image, 1);
// desplegar la imagen
imagePNG($image);
imagedestroy($image);
exit();
}

// determinar el tamano de la imagen a abrir
list($width, $height) = getimagesize($filename);
if($width>$height)
{
// es mas ancha que alta
if($width<$maxdimension) {
// es mas pequena de lo que queremos
$percent = 1;
} else {
// calculamos la proporcion
$percent = $maxdimension / $width;
}
} else {
// es mas alta que ancha
if($height<$maxdimension) {
// es mas pequena de lo que queremos
$percent = 1;
} else {
// calculamos la proporcion
$percent = $maxdimension / $height;
}
}
// calculamos las nuevas dimensiones
$newwidth = $width * $percent;
$newheight = $height * $percent;

// Crear miniatura y cargar imagen fuente
$thumb = imagecreate($newwidth, $newheight);
$source = imageCreateFromFile($filename);

// copiar la original con nuevas dimensiones
imagecopyresized($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);

// salida
imagePNG($thumb);
?>

Con esto ya tienes herramientas suficientes como para hacer tus imágenes propias..
Si quieres ideas para hacer tus propios ejemplos, aquí hay 2: Suerte!

Regresar

Creative Commons License
Recursos de PHP por Rodrigo Flores está licenciada bajo la Licencia Creative Commons Atribución/Compartir-Igual 2.5.