--- loncom/homework/randomlylabel.pm 2024/04/05 02:43:25 1.35 +++ loncom/homework/randomlylabel.pm 2024/07/04 17:55:04 1.37.2.1 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # randomlabel.png: composite together text and images into 1 image # -# $Id: randomlylabel.pm,v 1.35 2024/04/05 02:43:25 raeburn Exp $ +# $Id: randomlylabel.pm,v 1.37.2.1 2024/07/04 17:55:04 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -94,7 +94,7 @@ The argumants for the possible object ty x1:y1:x2:y2:color:thickness -=item RECTANGLE +=item RECTANGLE x1:y1:x2:y2:color:thickness:filled @@ -120,7 +120,7 @@ x:y:file:transparent:srcX:srcY:destW:des =over 4 -=item srcX,srcY,srcW,srcH +=item srcX,srcY,srcW,srcH the start and extant of the region in file to copy to x,y with width/height destW destH @@ -158,7 +158,7 @@ and in that case, if set to a valid valu color:width:open:filled -=over 4 +=over 4 =item open @@ -177,7 +177,7 @@ The possible values for this for the dif =over 4 -=item POLYGON +=item POLYGON a list of coords in the form @@ -210,10 +210,10 @@ use Apache::loncommon(); use Math::Trig(); use GD; use GD::Polyline(); +use LWP::UserAgent(); use Apache::lonnet; use lib '/home/httpd/lib/perl/'; use LONCAPA; -use LONCAPA::LWPReq; # # Note: Math::Trig is included in the standard perl package for many distros. @@ -232,11 +232,11 @@ sub get_image { if ($imgsrc !~ /^https?\:/) { $imgsrc=&Apache::lonnet::absolute_url($ENV{'HTTP_HOST'}).$imgsrc; } + my $ua=new LWP::UserAgent; my $request=new HTTP::Request('GET',"$imgsrc"); $request->header(Cookie => $ENV{'HTTP_COOKIE'}); my $file="/tmp/imagetmp".$$; - my $lonhost = $Apache::lonnet::perlvar{'lonHostID'}; - my $response=&LONCAPA::LWPReq::makerequest($lonhost,$request,$file,'','','',1); + my $response=$ua->request($request,$file); if ($response->is_success) { if ($response->content_type !~ m-/(png|jpg|jpeg)$-i) { my $conv_image = Image::Magick->new; @@ -302,8 +302,6 @@ sub add_click { sub handler { my $r = shift; - $r->content_type('image/png'); - $r->send_http_header; &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}); @@ -313,6 +311,22 @@ sub handler { } else { $prefix="cgi.$env{'form.token'}."; } + my $epsfile; + if (defined($env{$prefix."EPSFILE"})) { + my $user = $env{'user.name'}.'_'.$env{'user.domain'}; + if ($env{$prefix."EPSFILE"} =~ /^\Q$user\E_\d+_\d+_\d+_drawimage\.eps$/) { + $epsfile = $Apache::lonnet::perlvar{'lonPrtDir'}.'/'.$env{$prefix."EPSFILE"}; + } else { + &Apache::lonnet::logthis('Unable to create eps file for image object for -'. + $env{'form.token'}.'- for '.$user.' as EPSFILE has '. + 'unexpected value'); + return OK; + } + } + unless ($epsfile) { + $r->content_type('image/png'); + $r->send_http_header; + } my $image; if (defined($env{$prefix."BGIMG"})) { @@ -378,7 +392,6 @@ sub handler { $polygon->addPt($x,$y); $added++; } - $image->setThickness($width); if ($added) { if ($open && lc($open) ne 'no') { @@ -472,7 +485,16 @@ sub handler { } if (exists($env{'form.clickdata'})) { &add_click($image); } $image->setThickness(1); - $r->print($image->png); + if ($epsfile) { + if (open(my $pipe, "| convert png:- $epsfile")) { + print $pipe $image->png; + close($pipe); + } else { + &Apache::lonnet::logthis("randomlylabel unable to open pipe to convert png to eps"); + } + } else { + $r->print($image->png); + } return OK; }