jueves, 21 de enero de 2010

PHP y GD - Creando imágenes dinámicas.

Hace poco hablamos de CURL y sobre su potencia. Seguiremos hablando de CURL en el futuro pero en el largo paseo que nos queda por dar en las librerías de PHP, hoy hablaremos de GD, una librería empleada para crear imágenes dinámicas como captchas o cualquier cosa entretenida.

Para instalar esta librería es tan sencillo como ejecutar en un terminal:
  • sudo apt-get install php5-gd
*Antes de seguir:
Nota: En esta entrega veremos por encima cosas que no hemos empleado como la variable $_SERVER. En cualquier caso haremos el típico ejemplo de hola, tu sistema operativo es, tu ip es y tu navegador pero para GNOME.
Para ello antes de empezar, descargaremos el típico cartelito del pingüino:




Lo guardáis con vuestro navegador pulsando sobre segundo botón, guardar imagen y la ponemos en el escritorio, o si lo prefieres usando el comando wget en un terminal:
  • wget https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZTAQ22Eorf6FK4ZJjhzHJ4amgss_XoXuid-x5Usv-O7plz-w1W4E359brpzYh1HoOdUur00B9OyY_0BmnLihWmg_-QL8WuwAUrc2pbQEXSLqIQKXgSkBNY-iSP2ngJ-ycMxvEa1QHU6uK/s1600-h/basepro.png
Una vez descargado, si el nombre de la imagen es basepro.png procederemos a crear nuestra imagen dinámica, con la variable $_SERVER. Si queréis saber que contiene esta variable de tipo array, podéis usar este sencillo script:
<?php
print_r($_SERVER);
?>
 Como veréis tiene gran cantidad de campos el array pero sólo usaremos unos pocos. Si usas geany para ejecutar el script te imprimirá algo bastante raro y aunque no sea el caso emplearemos estas variables para hacer la tonteria de prueba. Si lo subes a un servidor, el resultado será totalmente diferente ya que el contenido de este array sería diferente.. En cualquier caso vamos manos a la obra.

Si lo hacemos con geany escogeremos los campos GDM_KEYBOARD_LAYOUT, USER y DISPLAY para uso local y usaremos el siguiente código que guardaremos como pruebagd.php
<?php
 /*
 *      This program is free software; you can redistribute it and/or modify
 *      it under the terms of the GNU General Public License as published by
 *      the Free Software Foundation; either version 2 of the License, or
 *      (at your option) any later version.
 *     
 *      This program is distributed in the hope that it will be useful,
 *      but WITHOUT ANY WARRANTY; without even the implied warranty of
 *      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *      GNU General Public License for more details.
 *     
 *      You should have received a copy of the GNU General Public License
 *      along with this program; if not, write to the Free Software
 *      Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
 *      MA 02110-1301, USA.
 */
   $im = imagecreatefrompng("basepro.png")or die ("No tienes instalado GD o la ruta no es valida");
   $color = imagecolorallocate($im, 0, 0, 0);
imagestring($im, 2, 5, 5,  "Hola, tu usario es: ".$_SERVER["USER"],       $color);
   imagestring($im, 2, 5, 16,  "Tu teclado es en: ".$_SERVER["GDM_KEYBOARD_LAYOUT"], $color);
   imagestring($im, 2, 5, 27,  "Usas el display: ".$_SERVER["DISPLAY"], $color);
   imagepng($im,"prueba.png");
   imagedestroy($im);
?>
 Creamos una imagen desde archivo con imagecreatefrompng, elegimos el color del texto con, imagecolorallocate, escribimos texto con imagestring donde el primer entero es el tamaño de fuente, el segundo entero es la separación de margen o sangría y el último entero es la posición vertical.

Ejecutamos el programa, y se creará la imagen con imagepng y se destruirá para liberar memoria con imagedestroy. Como resultado obtendremos algo parecido a esto:


Como veis es bastante sencillo y es una manera rápida de aprender la librería GD que nos permitirá en el futuro realizar cosas bastante potentes.

No hay comentarios:

Publicar un comentario