in reply to Working with images

Co-incidently I've embarked on this mission also. I want to create some graphs dynamically, overlay an image map and pump it all out to the browser without hitting the disk.

The code is extremely rough at this stage, and is an example of what not to put into production. There is much polishing to do.

#!/usr/bin/perl -w use GD::Graph::bars; use GD::Graph::Map; use CGI qw/:standard/; use Date::Calc qw/Delta_Days Date_to_Text Add_Delta_Days/; my @data = ( ["node1"], ); my @dates = ("11-3-2002","12-4-2002", "15-5-2002","31-12-2002"); my $startdate = $dates[0]; for (my $i=0;$i<$#dates;$i+=1){ my @basedate = split(/-/, $dates[$i] ); my @nextdate = split(/-/, $dates[$i+1]); my $dd = Delta_Days($basedate[2],$basedate[1],$basedate[0], $nextdate[2],$nextdate[1],$nextdate[0]); push @data, [$dd]; } my $my_graph = new GD::Graph::bars(200,500); $my_graph->set( x_label => 'Node', y_label => 'Date', title => "Technology", y_max_value => 365, y_tick_number => 10, y_label_skip => 2, y_number_format => \&y_format, cumulate => 1, borderclrs => 'black', bar_spacing => 4, bar_width => 30, values_vertical => 1, accntclr => 'lgreen', transparent => 0, ); sub y_format { my $val = shift; my @ysd = split(/-/, $startdate); my @delta = Add_Delta_Days($ysd[2],$ysd[1],$ysd[0], int($val) ); return substr(Date_to_Text(@delta), 4); } $my_graph->set_legend( qw(COM21 euroDOCSIS DOCSIS)); my $format= $my_graph->export_format; if (length (my $info = path_info())) { print header("image/$format"), $my_graph->plot(\@data)->$format(); my $map = new GD::Graph::Map($my_graph, info => '%l: x=%x y=%y' +); } print header; my $session = "graph"; my $map = new GD::Graph::Map($my_graph, info => '%l: x=%x y=%y'); print "hey this is way cool dude"; print $map->imagemap(url()."/$session.png", \@data, noImgMarkup=>1);

The generated image is a one stacked bar, with dates on the y.

Merlyn has a column that sends a dynamically created image to the browser, from which I've learnt, and adapted.