inicio anterior siguiente

Generación de imágenes

En este capítulo se analizará como enviar una imagen desde un cgi y posteriormente, como generarlas a voluntad.
El protocolo para el envío de imágenes no varía notablemente en relación al envío de otro tipo de documentos al browser. Primero ha de enviarse un header indicando el tipo de documento que enviaremos y luego byte a byte, el documento (imagen) en cuestión. (Una lista de headers la encuentras en el capítulo uno del tutorial).

A continuación se muestra el código del programa lanzagif.c el cual ilustra el uso de la función lanzaGif que nuestra un gif almacenado en el disco, la función no modifica para nada la imagen y puede ser usado para mostrar alguna imagen aleatoriamente (yo lo uso en Minibanner).

Los archivos GIF ( y otros formatos gráficos ) contienen cualquier combinación de caractéres, por lo cual es importante transmitirlos exactamente como están almacenados en el disco. Desafortunadamente algunas versiones de Microsoft asumen que al enviar un caracter de fin de linea usted desea enviar también un retorno de carro y lo agregan sin consultarle. Esta "delicadeza" puede ser deshabilitada con la instrucción
_fmode= _O_BINARY;

En el siguiente código se ha incluido dentro del condicional
#ifdef _WIN32

que será verdadero sólo si se compila el programa bajo Windows.

bajar

#include <stdio.h>

void lanzaGif( char *NombreGif );
main(){
    lanzaGif("ejemplo.gif");
}


void lanzaGif( char *NombreGif ){
/* *************************************************************
   envia una imagen leyendola del archivo NombreGif

**************************************************************** */

 #define GIF_BUFF_SIZE 2048

 FILE         *fp;
 int          buff[GIF_BUFF_SIZE];
 int          leido = GIF_BUFF_SIZE;


 #ifdef _WIN32
    _fmode= _O_BINARY;  // Necesario en Visual C++
 #endif

 fp = fopen(NombreGif,"rb");    
 if ( fp != NULL )
 {
    printf( "Content-type: image/gif\n\n");   /* Este es el header de un gif */  

    while ( leido == GIF_BUFF_SIZE ){
       leido = fread(&buff,1,GIF_BUFF_SIZE,fp);
       if (leido)
       {
          fwrite(&buff,1,leido,stdout);  /* lanza lo leido por
                                                        la salida standard */
       } 
    } 
     fclose(fp);
 }
}





El resultado del programa lo ves en la imagen a continuación. (El código html para la inclusión del cgi es:
<img src=lanzagif.cgi>

Ahora tenemos dos formas de generar un gif, una es estudiando la estructura interna de un gif y lanzando 1 a 1 los bytes que lo compondrían o utilizar alguna librería para lograr lo mismo. Como el propósito de este tutorial no es profundizar el formato de archivos gifs nos remitiremos a usar GD una popular librería disponible gratuitamente en internet.
Para eso desarrollaremos un pequeño ejemplo que no pretende ahondar en el uso de la mencionada librería sino mostrar la base de la generación de imágenes.

inicio anterior siguiente