2
0
Эх сурвалжийг харах

+ Added CGI output example

michael 24 жил өмнө
parent
commit
18b4f7d832

+ 4 - 1
packages/libgd/README

@@ -23,8 +23,11 @@ can be compiled in both the {$H+} as the {$H-} state.
 The hasttf define should be defined for libraries which have TTF2 lib 
 support compiled in.
 
-The example is adapted from the example of the gd unit by Mike Bradbery.
+The gdtest example is adapted from the example of the gd unit by Mike Bradbery.
 It shows how to use the pascal-like functions in the gd unit instead of the
 raw C like functions which use pchars.
 
+the gdtestcgi example shows how to output an image to standard output,
+this can be used for CGI scripts.
+
 Michael.

+ 88 - 0
packages/libgd/gdtestcgi.pp

@@ -0,0 +1,88 @@
+{ Author   : Mike Bradbery 
+  Copyright: 2000 Mike Bradbery and others, see file "forum.txt" }
+
+program gdtestcgi;
+
+uses gd;
+
+var 
+  f:pFile;
+  black,white:integer;
+  red,green,blue:integer;
+  im:gdImagePtr;
+  s1,s2:string;
+  points:array[0..2] of gdpoint;
+  x : longint;
+  styleDotted: array[0..1] of longint;
+  styleDashed: array[0..5] of longint;
+  top,bottom,left,right : longint;
+
+// Reference to the libc fdopen function, needed to open standard output.
+
+Function fdopen(FD: longint; Mode : Pchar) : Pointer;cdecl;external 'c';
+
+Begin
+  left := 60;
+  top := 30;
+  right := 580;
+  bottom := 300;
+  im:=gdImageCreate(600,390);
+  black:=gdImageColorAllocate(im,0,0,0);
+  white:=gdImageColorAllocate(im,255,255,255);
+  red:=gdImageColorAllocate(im,255,0,0);
+  green:=gdImageColorAllocate(im,0,255,0);
+  blue:=gdImageColorAllocate(im,0,0,255);
+  styleDotted[0] := red;
+  styleDotted[1] := gdTransparent;
+
+  styleDashed[0] := white;
+  styleDashed[1] := white;
+  styleDashed[2] := white;
+  styleDashed[3] := gdTransparent;
+  styleDashed[4] := gdTransparent;
+  styleDashed[5] := gdTransparent;
+  gdImageSetStyle(im,@styleDashed[0],6 );
+
+  {box around the lot}
+  gdImageRectangle(im,0,0,599,389,white);
+
+  {main title}
+  s1:='The Test Graph Title.';
+  gdImageString(im, gdFontLarge,{im^.w}600  div 2 - ((length(s1)-1)*gdFontLarge^.w div 2),2{gdFontLarge^.h}, s1, white);
+  gdImageLine(im,600  div 2 - ((length(s1)-1)*gdFontLarge^.w div 2),gdFontLarge^.h+3,600  div 2 + ((length(s1)-1)*gdFontLarge^.w div 2),gdFontLarge^.h+3,white);
+
+  {box around the legend.}
+  gdImageRectangle(im,100,350,500,370,white);
+  s1:='The Legend.';
+  gdImageString(im, gdFontLarge, 100+2, 350+2, s1, white);
+
+  s1:='The Y axis Title.';
+  gdImageStringUp(im, gdFontLarge, Left-5-gdFontLarge^.h-gdFontLarge^.w*2, top+(bottom-top) div 2+((length(s1)-1) * gdFontLarge^.w div 2),s1, white);
+  // gdImageStringUp(im, gdFontLarge, 2, 50, @s1[1], white);
+  s1:='The X axis Title.';
+  gdImageString(im, gdFontLarge, left+(right-left) div 2-((length(s1)-1)*gdFontLarge^.w div 2),Bottom + 5 +gdFontLarge^.h,s1,white);
+
+  {axis}
+  gdImageLine(im,left,top,left,bottom,white);
+  gdImageLine(im,left,bottom,right,bottom,white);
+
+  { the origin is 30,360}
+  for x:=0 to 10 do
+  begin
+    str(x,s1);
+    gdImageLine(im,left+(x*(right-left) div 10) ,bottom,left+(x*(right-left) div 10) ,bottom+3,white);
+    gdImageLine(im, left+(x*(right-left) div 10), bottom, left+(x*(right-left) div 10), top, gdStyled);
+    gdImageString(im, gdFontLarge, left+(x*(right-left) div 10) - ((length(s1)-1)*gdFontLarge^.w div 2),bottom+5, s1, white);
+    gdImageLine(im,left,bottom-(x*(bottom-top) div 10),left-3,bottom-(x*(bottom-top) div 10),white);
+    gdImageLine(im, left, bottom-(x*(bottom-top) div 10), right, bottom-(x*(bottom-top) div 10), gdStyled);
+    gdImageString(im, gdFontLarge,left-5-((length(s1)-1)*gdFontLarge^.w),bottom-(x*(bottom-top) div 10)-gdFontLarge^.h div 2, s1, white);
+  end;
+  // open standard output as C file.
+  f:=fdopen(1,'wb');
+  // Write header
+  Writeln('Content-type: image/png');
+  Writeln;
+  gdImagePng(im,f);
+  fclose(f);
+  gdImageDestroy(im);
+End.