version 1.1, 2001/12/07 22:52:38
|
version 1.2, 2001/12/10 15:45:54
|
Line 24
|
Line 24
|
# |
# |
# http://www.lon-capa.org/ |
# http://www.lon-capa.org/ |
# |
# |
|
########################################################################### |
|
# |
# CGI-BIN interface to GD, used for making mathematical plots. |
# CGI-BIN interface to GD, used for making mathematical plots. |
# |
# |
# User specifies the following variables (given are defaults): |
# User specifies the following variables (given are defaults): |
Line 33
|
Line 35
|
# xmax = " 10.0" |
# xmax = " 10.0" |
# ymin = "-10.0" |
# ymin = "-10.0" |
# ymax = " 10.0" |
# ymax = " 10.0" |
|
# transparent (doesn't work with gif?) |
# frame |
# frame |
# drawaxes |
# drawaxes |
# drawtics |
# drawtics |
Line 51
|
Line 54
|
# size of a labelN is one of : |
# size of a labelN is one of : |
# giant, large, medium, small, tiny |
# giant, large, medium, small, tiny |
# |
# |
|
########################################################################### |
use GD; |
use GD; |
|
|
my @inputs = split(/&/,$ENV{'QUERY_STRING'}); |
my @inputs = split(/&/,$ENV{'QUERY_STRING'}); |
Line 73 $axis->{'ylen'} = $axis->{'ymax'} - $axi
|
Line 77 $axis->{'ylen'} = $axis->{'ymax'} - $axi
|
$vtic_every = &grab('vtic_every',1.0,\%In); |
$vtic_every = &grab('vtic_every',1.0,\%In); |
$htic_every = &grab('htic_every',1.0,\%In); |
$htic_every = &grab('htic_every',1.0,\%In); |
|
|
my $image = new GD::Image($height,$width); |
my $image = new GD::Image($width,$height); |
|
|
# allocate standard colors |
# allocate standard colors |
my $white = $image->colorAllocate(255,255,255); |
my $white = $image->colorAllocate(255,255,255); |
my $black = $image->colorAllocate( 0, 0, 0); |
my $black = $image->colorAllocate( 0, 0, 0); |
|
|
# Draw a black frame around the picture |
# Draw a black frame around the picture |
&drawtics($htic_every,$vtic_every) if (exists($In{"drawtics"})); |
&drawtics($htic_every,$vtic_every) if (exists($In{'drawtics'})); |
&drawaxes($axis) if (exists($In{"drawaxis"})); |
&drawaxes($axis) if (exists($In{'drawaxis'})); |
&frame(1) if (exists($In{'frame'})); |
&drawframe(1) if (exists($In{'frame'})); |
|
# make the background transparent if needed (this doesn't work, at least |
|
# not for gif images, don't know if it works for png) |
|
$image->transparent($white) if (exists($In{'transparent'})); |
|
|
## Take care of labels and data series |
## Take care of labels and data series |
foreach (keys %In) { |
foreach (keys %In) { |
Line 108 foreach (keys %In) {
|
Line 115 foreach (keys %In) {
|
} |
} |
} |
} |
|
|
# make the background transparent and interlaced |
|
$image->transparent($white); |
|
|
|
# make sure we are writing to a binary stream |
|
binmode STDOUT; |
|
|
|
# Convert the image to PNG and print it on standard output |
# Tell the browser our mime-type |
print <<END; |
print <<END; |
Content-type: image/png |
Content-type: image/gif |
|
|
END |
END |
|
|
my $BinaryData=$image->plot(\@data)->png; |
my $BinaryData=$image->png; |
undef $image; |
undef $image; |
binmode(STDOUT); |
binmode(STDOUT); |
open IMG,"|pngtopnm|ppmtogif 2>/dev/null"; # convert into a gif image |
open IMG,"|pngtopnm|ppmtogif 2>/dev/null"; # convert into a gif image |
Line 166 sub drawtics{
|
Line 168 sub drawtics{
|
my ($htic_every,$vtic_every) = @_; |
my ($htic_every,$vtic_every) = @_; |
my ($width,$height) = $image->getBounds(); |
my ($width,$height) = $image->getBounds(); |
|
|
$ticwidth = ($width > 99 ? 10 : int($width /10) + 1); |
$ticwidth = ($width > 99 ? 5 : int($width /20) + 1); |
$ticheight = ($height > 99 ? 10 : int($height/10)); |
$ticheight = ($height > 99 ? 5 : int($height/20) + 1); |
|
|
# Do tics along y-axis |
# Do tics along y-axis |
for ($ntic = 0; $ntic <=int($axis->{"ylen"}/$vtic_every); $ntic++){ |
for ($ntic = 0; $ntic <=int($axis->{"ylen"}/$vtic_every); $ntic++){ |
Line 196 sub drawcurve{
|
Line 198 sub drawcurve{
|
} |
} |
} |
} |
|
|
sub frame{ |
sub drawframe{ |
# Draw a frame around the picture. |
# Draw a frame around the picture. |
my ($xoffset,$yoffset) = @_; |
my ($xoffset,$yoffset) = @_; |
$xoffset = $xoffset || 1; |
$xoffset = $xoffset || 1; |