Accueil
Rechercher:
sur developpez.com sur les forums
Forums | Tutoriels | F.A.Q's | Participez | Hébergement | Contacts
Club Emploi Blogs   TV   Dév. Web PHP XML Python Autres 2D-3D-Jeux Sécurité Windows Linux PC Mac
Accueil Conception Java DotNET Visual Basic  C  C++ Delphi Eclipse MS-Office SQL & SGBD Oracle  4D  Business Intelligence
FORUMS DELPHI F.A.Q DELPHI TUTORIELS DELPHI LIVRES COMPOSANTS SOURCES DEFI TELECHARGEZ DELPHI TV

Les images en CGI

Ce que l'on sait déjà

Nous savons que le programme CGI renvoie au serveur une entête non visible dans le browser :
  WriteLn('Content-Type: text/html');
  WriteLn(''); 
 

Ce que j'avais pas dit

C'est qu'on peut très bien renvoyer un autre type de donnée ! comme par exemple :
  WriteLn('Content-Type: image/gif');
  WriteLn(''); 
 
Il s'agit maintenant d'envoyer l'image...

Envoyer des données binaires

Dans un premier temps, voici comment envoyer des données binaire sur StdOutput.

J'ai écrit une procédure générique pour envoyer un TStream vers StdOutput avec un paramètre Head pour pouvoir ajouter une entête:
  procedure WriteStream(stream:TStream;Head:String);
   var
    buffer:array[0..1024] of char;
    l:integer;
    f:file;
  begin
   assignfile(f,''); rewrite(f,1); // this will overide any previous output (WriteLn)
                                   // but I can't find an other way to do this quickly !
   if head<>'' then BlockWrite(f,head[1],length(head));
   Stream.position:=0;
   l:=Stream.Read(buffer,sizeof(buffer));
   while l>0 do begin
    BlockWrite(f,buffer,l);
    l:=Stream.Read(buffer,sizeof(buffer));
   end;
   closefile(f);
  end;
 
On utilisera également WriteFile pour envoyer un fichier existant :
 procedure WriteFile(FileName:string;Head:string);
  var
   s:TFileStream;
 begin
  s:=TFileStream.Create(FileName,fmOpenRead);
  WriteStream(s,Head);
 end;
 

Reste à créer un GIF !

Pour celà, j'ai une unité GIF qui sauvegarde un TBitmap dans un Stream au format GIF. Il reste alors à utiliser :
 procedure WriteBitmapAsGIF(Bitmap:TBitmap);
  Var
   GifStream:TMemoryStream;
 begin
  Try
   GifStream:=TMemoryStream.Create;
   BitmapToGifStream(Bitmap,GifStream);
   WriteStream(GifStream,'Content-type: image/gif'+#13#10+
                         #13#10);
  Finally
   GifStream.Free;
  end;
 end;
 
Mais oui non ! je vous la file pas l'unité GIF ! Burn all GIFs
  <img src="/cgi-bin/draw?Voici le Texte"> donne 

c'est tout ! A +
Suite du tutoriel :
Sommaire, Introduction, Les paramètres, Redirection, Les images, protection par mot de passe, Les cookies, Base de données, FAQ





Hit-Parade
Responsables bénévoles de la rubrique Delphi : Bruno Guérangé et Pierre Rodriguez - Contacter par EMail :
Vos questions techniques : forum d'entraide Delphi - Publiez vos articles, tutoriels et cours
et rejoignez-nous dans l'équipe de rédaction du club d'entraide des développeurs francophones
Nous contacter - Copyright © 2000-2008 www.developpez.com - Legal informations.