Manual de GD
¿ Que es el GD ?

Bien, el GD es una libreria para la generacion dinamica de imagenes, al estar programada en PHP la extension sera en .php pero la trataremos igual como si fuera una imagen a la hora de añadirla al HTML, <img src="archivo.php">. La razon es que, al cargar ese script, a nuestro navegador le ha de llegar una cabecera indicando que es una imagen, y en lugar de codigo HTML o texto, llegaran una serie de datos binarios ilegibles para nosotros, pero que son el contenido de la imagenIgual que podemos crear un XML HTML CSS apartir de PHP se pueden crear imagenes, antes de empezar tenemos que tener 3 cosas claras:
.1- Paciencia, como en todo lo referente al PHP.
.2- Saber bien que tipo de header colocar en cada momento.
.3- Nivel basico de PHP.

Mi primer GD.

Bien, empezemos a crear un GD :), para ello necesitamos primero un header para indicar que es una imagen, los headers se ponen al princpio de todo,
indicando que tipo de imagen mostraremos, header("Content-type: image/png") estro indica que la imagen que crearemos sera PNG, header("Content-type: image/jpeg")
esto que sera JPEG, todo dependiendo de la configuracion de GD en el php.

Antes, en todos los GD, se hara lo mismo, "crear, dibujar y enviar", luego otra opcion que es borrarla, tal vez lo de "borrar" os a sonado un poco bruto,
pero lo que se hace al borrar es borrar la memoria que ocupo mientras se creaba la imagen.

 
1
     <?
2
        Header("Content-type: image/png"); // indicamos tipo de imagen que queremos
3
        $imagen = imagecreate(150,100); // creamos la imagen con las medidas
4
    
5
        // definimos las cadenas de texto a mostrar
6
        $titulo="DarkSoldier.net GD";
7
        $Web="http://darky.nc-team.net";
8
        $Web2="www.php.net";
9
        $Web3="http://php_hispano.net";
10
        
11
        // definimos los colores
12
        $fondo=imagecolorallocate($imagen, 160, 160, 160);
13
        $color1=imagecolorallocate($imagen, 255, 255,0);
14
        $color2=imagecolorallocate($imagen, 20, 10, 255);
15
        
16
        // Para hacer el fondo de color transparente
17
        // colocamos esta funcion
18
        // imagecolortransparent ($imagen, ,$fondo);
19
        // con la variable de la imagen y el color de fondo
20
        // para hacerlo transparente
21
        imagecolortransparent($imagen,$fondo);
22
    
23
        // mostramos los datos con imagestring ($imagen, n, x, y, $variabledeltexto, $color)
24
        // donde "n" es el tamaño de la letra
25
        // "x" y "y" son las cordenadas y lo demas se supone ^^
26
    
27
        imagestring($imagen, 2, 4, 4, $titulo, $color2);
28
    
29
        imagestring($imagen, 2, 4, 30, $Web, $color1);
30
        imagestring($imagen, 2, 4, 50, $Web2, $color1);
31
        imagestring($imagen, 2, 4, 70, $Web3, $color1);
32
    
33
        // añadimos un par de lineas para hacerlo mas bonito
34
        imagerectangle($imagen, 1, 1, 148, 98, $color2);
35
        imagerectangle($imagen, 1, 20, 148, 98, $color2);
36
    
37
        // creamos la imagen
38
        Imagepng($imagen);
39
        imagedestroy($imagen);
40
       
41
    ?>

 

Explicacion del codigo:

Bien primero las etiquetas <?php ?> jeje.
Luego el header que ya a sido explicado el porque a ese header.

Luego creamos la "variable" $imagen con la funcion imagecreate();, que en realidad, no es solo una variable, es un identificador usado por la libreria GD de echo que si ponemos:
echo $imagen; no nos saldra la imagen. Por cierto, la altura y anchura son en PIXELS.

Creamos la "variable" $fondo (igual que imagen, es un identificador de la librearia GD) con el color que queramos usando la funcion imagecolorallocate($variabledelaimagen,R,G,B); donde "Red"(rojo) "Green"(Verde) y "Blue"(Azul) son los colores primarios, se añadiran numericamente con numeros enteros ( sin decimales ) entre el 0 y 255.

Con esto solo creamos un color, se pueden poner tantos colores como deseemos. Esta funcion solo mete el color de fondo ee!! imagefill($variabledelaimagen, x, y, $color); donde "x" y "y" son las cordeenadas.

Imagejpeg(); crea la imagen para mostrar y la envia al navegador para que podamos verla y luego imagedestroy(); elimina la imagen de la memoria
como dijimos antes.

Bien, esto se podria decir que es una base, tan solo mostraria una imagen de 200x200 (¡¡PIXELES!!) con un fondo gris.


"Rellenar un GD"

Bien, una imagen asi en si queda muuuy sosa, que podemos hacer?, rellenarlo, como?, pues, con funciones tipo...:

imagerectangle($imagen, x, y, xx, yy, $color);

Donde "x" y "y" son las coordenadas de la parte superior de la izquierda y "xx" y "yy" las de la parte inferior de la derecha, lo demas ya debeis saberlo ^^
Pero esa funcion nos dibujaria un rectangulo sin relleno, como lo rellenamos?

imagefilledrectangle($imagen, x, y, xx, yy, $color);

Es exactamente lo mismo pero esta funcion rellena el rectangulo jeje

Poligonos con y sin relleno:

imagefilledpolygon($imagen, $vertice, nº vert , $color); con relleno.
imagepolygon($imagen, $vertice, nº vert , $color);
sin relleno.

Este es un poco mas complejo pero si se pilla el truquillo facil ^^, para ello es necesario crear un array con los vertices,
$vertice = array(20,100,100,180,180,100,100,20);
Con esto indicamos las "esquinas" del poligono, se añaden asi: x, y, xx, yy, xxx, yyy, etc.. indicamos el "x" y "y" del primer vertice, el segundo y asi :)
A ver el "nº vert" es el numero de vertices que tiene el poligono, si tiene 8 vertices ponemos 8 si tiene 10021 vertices ponemos 10021, y asi..

Circunferencias, arcos, elipses.

Os preguntareis.. como este capullito pone 3 cosas que parecen dificiles en un mismo grupo?, puest porque solo se usa una función para todas esas figuras :O, la funcion es:
imagearc($imagen, x, y, h, v, Gi, Gf, $color);
  • $imagen: Nombre del identificador del imagecreate();
  • "x" e "y" son las cordenadas del centro.
  • "h" es la longitud del eje horizontal de la elipse.
  • "v" es la longitud del eje vertical de la elipse.
  • "Gi" punto inicial del arco (Grados sexagesimales)
  • "Gf" punto final del arco (Grados sexagesimales)
  • $color: color de la linea

Poner de fondo una imagen ya hecha.

Pues bien, si aparte de dibujar lineas y todo eso, queremos hacerla sobre un fondo de una imagen ya hecha, lo primero que haremos sera definir la imagen en una variable con la carpeta y el nombre de la imagen, ejemplo: $imagenfondo="./imagenes/imagen1.jpg" o $imagenfondo2="./imagenes/imagen1.png"

¡¡ATENCION!! El formato de la imagen que vamos a poner debe coincidir con la que creamos, si creamos una imagen JPG usaremos una imagen tipo JPG !!

Bien, una vez definida la imagen en una variable, tan solo tendremos que cambiar la funcion "imagecreate();" por imagecreatefromjpeg($imagenfondo); o imagecreatefrompng($imagenfondo2);

Añadir lineas a la imagen.

La funcion que usaremos sera: imageline($imagen,x,y,xx,yy,$color) donde "x" y "y" son las cordenadas de un extremo y "xx" y "yy" son las del otro extremo, facil no ?

Insertar Caracteres.

Posiblemente la funcion mas sencilla a la hora de crear una imagen dinamica, usando: imagechar ($imagen, n, x, y, $txt, $color), en esta funcion tan solo vemos 2 cosas nuevas, que son "n" que indica el tamaño del texto, los numeros del tamaño son 1,2,3,4 y 5, ninguno mas, y luego $txt que es la variable que habremos asignado previamente donde esta la cadena de texto, ejemplo(Usaremos el de rinconastur que lo explica muy bien):

1
     <?
2
           Header("Content-type: image/png");
3
        $im = imagecreate(150,150);
4
        $t1="Tamaño 1";
5
        $t2="Tamaño 2";
6
        $t3="Tamaño 3";
7
        $t4="Tamaño 4";
8
        $t5="Tamaño 5";
9
       
10
            $fondo=imagecolorallocate($im, 0, 0, 200);
11
            $amarillo=imagecolorallocate($im, 255, 255,0);
12
    
13
        imagechar($im, 1, 0, 0, $t1, $amarillo);
14
        imagechar($im, 2, 20, 20, $t2, $amarillo);
15
        imagechar($im, 3, 40, 40, $t2, $amarillo);
16
        imagechar($im, 4, 60, 60, $t2, $amarillo);
17
        imagechar($im, 5, 80, 80, $t2, $amarillo);
18
    
19
            Imagepng($im);
20
            imagedestroy($im);
21
       
22
    ?>  

Bien, luego hay otra funcion imagecharup(); que es lo mismo pero para arriba, verticalmente.

Imagestring();

Bien, imagechar y imagecharup tan solo nos mostraba el primer caracter de toda la cadena, pues con imagestring(); mostramos toda la cadena, todo el texto, ademas, la funcion en si solo cambia la palabra char por string porque el contenido de dentro viene a ser el mismo: imagestring ($imagen, n, x, y, $txt, $color); y como en imagechar en imagestring tambien tenemos para mostrar la cadena verticalmente con la funcion imagestringup();

En los proximos Manuales de GD intentare poner como añadir fuentes y tamaños aparte de los que viene con PHP auque os adelanto que tendreis que teneri instalada la libreria FreeType sino nanai :P.


Gracias a...

Bien, antes de nada, gracias a "thessoro" y a "Aeoris" que me enseñaron a mirar manuales antes de preguntar xDD y fue una de las razones por la cual me decidi ha hacer un manual y demostrarles que ya no soy como antes jaja, gracias tambien a.. oO rinconastur por su magnifico manual tan bueno y a php.net y a google !! como no :P, en fin, espero que les guste mi primer manual serio ^^.

PD: Gracias a ZydRick por su PHP TO HTML para colorear el codigo y tals ^^.

Exclusivo para #php_para_torpes @ IRC-Hispano.org :: http://php-hispano.net :: ^

http://darky.nc-team.net @ DarkSoldier

 


PHP-Hispano.net - Porque al final, todos acabamos aprendiendo.