Procesamiento y generación de imágenes a partir de una librería en PHP.
Esta librería se utiliza para crear y manipular ficheros de imágenes de diferentes tipos como, por ejemplo, las extensiones más utilizadas en la web; JPEG/JPG, GIF y PNG. Para poder tratar todas estas extensiones hay que tener una versión superior a gd-2.0.28.
A partir de PHP 4.3 hay una versión incluida de la librería GD, pero para poder escribir en formato GIF es necesario tener una versión igual o superior a PHP 4.3.9.
Se puede trabajar con los metadatos de las imágenes creadas por cámaras digitales, pero para ello es necesario utilizar la extensión exif. Se puede encontrar más información en la página oficial de PHP: www.php.net/manual/es/ref.exif.php
Instalación
Para saber si se puede utilizar la librería, hay que comprobar si está instalada. Para esto, hay que ejecutar el siguiente comando:
//Si aparece en el array GD, significa que está disponible
$extensiones = get_loaded_extensions();
print_r($extensiones); //Para mostrarlo por pantalla
El resultado puede ser algo como lo siguiente (depende de lo que tenga instalado el servidor):
Array ( [0] => … [27] => gd [28] => … )
En caso de que no aparezca, hay que instalarlo. Para ello, se le puede echar un vistazo al artículo para poder instalarlo en Linux. Hay que fijarse en el “Paso 4: Instalar módulo PHP5-mysql y otras extensiones PHP necesarias”, donde se habla de la instalación de diversos paquetes, entre ellos GD. Y para más información sobre la instalación, consultar la página oficial de PHP.
Utilizaciones
Entre los usos que se le pueden dar a esta librería están:- La creación de figuras geométricas: líneas, elipses, polígonos, puntos, círculos… y todo lo que ello conlleva
- La creación de textos
- La creación de gráficos
- Añadir una marca de agua a las imágenes
- Crear un captcha casero con texto y ruido
- …
Imagen 1: Coordenadas
También hay que tener en cuenta que si las imágenes son demasiado pesadas, la librería GD no es la más indicada para trabajar con ellas. Habría que buscar otras alternativas, como por ejemplo, Wide Image o cualquier otra librería de imágenes que pueda manejar más “peso”, soportada por PHP.
Funciones
A continuación se exponen las funciones más básicas de la librería. Para completar la información se puede visitar la página oficial, donde aparecen todas las funciones: php.net/manual/es/ref.image.phpPara crear un fondo:
- $imagen = imagecreate($ancho, $alto);
- Recomendada: $imagen = imagecreatetruecolor($ancho, $alto);
Nota: Por defecto, el fondo que se crea es de color negro. Para cambiar el color de fondo habría que utilizar la función:
imagefill($imagen,$x,$y,$color);
Siendo $x, $y las coordenadas desde las que se empieza a rellenar, por tanto, si se quiere rellenar completamente debería ser 0, 0. Para crear un color se utiliza:
$grey = imagecolorallocate($imagen, 200, 200, 200);
Y si se le quiere dar transparencia, entonces se utiliza:
$grey = imagecolorallocatealpha($imagen, 200, 200, 200, 50);
- Para imágenes png:
$imagen = imagecreatefrompng("http://.../images/imagen.png"); - Para imágenes gif:
$imagen = imagecreatefromgif("images /imagen.gif"); - Para imágenes jpg/jpeg:
$imagen = imagecreatefromjpeg("images /imagen.jpg");
- imageline($imagen, $xInicio, $yInicio, $xFin, $yFin, $color);
- imagesetpixel($imagen, $x, $y, $color);
- imagefilledarc($imagen, $centroX, $centroY, $ancho, $alto, $anguloInicio, $anguloFin, $color, $estilo);
Siendo los posibles estilos para $estilo los siguientes:- IMG_ARC_PIE: produce un borde redondeado
- IMG_ARC_CHORD: conecta los ángulos de inicio y de finalización con una línea recta
- IMG_ARC_NOFILL: indica que el arco o cuerda deberían estar perfilados, no rellenados
- IMG_ARC_EDGED: usado junto con IMG_ARC_NOFILL, indica que los ángulos de inicio y finalización deberían estar conectados con el centro
Nota: para utilizar conjuntamente los estilos hay que separarlos por |. Ejemplo: imagefilledarc($imagen, $centroX, $centroY, $ancho, $alto, $anguloInicio, $anguloFin, $color, IMG_ARC_NOFILL|IMG_ARC_EDGED);
- Relleno: imagefilledrectangle($imagen, $xInicio, $yInicio, $xFin, $yFin, $color);
- Borde: imagerectangle($imagen, $xInicio, $yInicio, $xFin, $yFin, $color);
Nota: si se van a utilizar las dos funciones, se debería dibujar primero el relleno y después el borde, para que el borde se superponga al relleno.
- Relleno: imagefilledpolygon($imagen, $puntosArray, $cantidadPuntos, $color);
- Borde: imagepolygon($imagen, $puntosArray, $cantidadPuntos, $color);
- Para dibujar elipses:
- Relleno: imagefilledellipse($imagen, $centroX, $centroY, $ancho, $altura, $color);
- Borde: imageellipse($imagen, $centroX, $centroY, $ancho, $altura, $color);
- Horizontal:
- imagestring($imagen, $fuente, $x, $y, $texto, $color);
Siendo $fuente un número del 1 al 6 - imagefttext($imagen, $tamaño, $angulo, $x, $y, $color, $fuente, $texto);
Siendo $fuente una ruta de una fuente .ttf
- imagestring($imagen, $fuente, $x, $y, $texto, $color);
- Vertical:
- imagestringup($imagen, $fuente, $x, $y, $texto, $color);
Siendo $fuente un número del 1 al 6
- imagestringup($imagen, $fuente, $x, $y, $texto, $color);
Ainhoa DSB
Desarrolladora de aplicaciones en Java y experta en tecnologías abiertas para la...