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);
$colorBG = imageColorAllocate($image, 192, 192, 192);
$colorTXT = imageColorAllocate($image, 0, 0, 255);
imageString($image, 5, 10, 40, "No Image", $colorTXT);
imageInterlace($image, 1);
header("Content-type: image/png");
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
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
header("Content-type: image/png");
if(!isset($maxdimension)) $maxdimension = 100;
if(!isset($filename))
{
$image = imageCreate($maxdimension,$maxdimension);
$colorBG = imageColorAllocate($image, 192, 192, 192);
$colorTXT = imageColorAllocate($image, 0, 0, 255);
imageString($image, 5, 10, 40, "No Image", $colorTXT);
imageInterlace($image, 1);
imagePNG($image);
imagedestroy($image);
exit();
}
list($width, $height) = getimagesize($filename);
if($width>$height)
{
if($width<$maxdimension) {
$percent = 1;
} else {
$percent = $maxdimension / $width;
}
} else {
if($height<$maxdimension) {
$percent = 1;
} else {
$percent = $maxdimension / $height;
}
}
$newwidth = $width * $percent;
$newheight = $height * $percent;
$thumb = imagecreate($newwidth, $newheight);
$source = imageCreateFromFile($filename);
imagecopyresized($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
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:
- Un graficador de diagramas de barras
- Un graficador de diagramas de pie
Suerte!
Regresar
Recursos de PHP por Rodrigo Flores está licenciada bajo la Licencia Creative Commons Atribución/Compartir-Igual 2.5.