--- loncom/homework/randomlylabel.pm 2024/04/05 02:31:23 1.34 +++ loncom/homework/randomlylabel.pm 2024/04/09 18:47:23 1.37 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # randomlabel.png: composite together text and images into 1 image # -# $Id: randomlylabel.pm,v 1.34 2024/04/05 02:31:23 raeburn Exp $ +# $Id: randomlylabel.pm,v 1.37 2024/04/09 18:47:23 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 @@ -146,13 +146,19 @@ installed TTF font and point size either B or B +=item rotation + +number of degrees to rotate the text, relative to the horizontal. +only used if font attribute is set to a freetype font (e.g., helvetica 12), +and in that case, if set to a valid value, overrides value set for direction. + =back =item POLYGON color:width:open:filled -=over 4 +=over 4 =item open @@ -171,7 +177,7 @@ The possible values for this for the dif =over 4 -=item POLYGON +=item POLYGON a list of coords in the form @@ -207,7 +213,7 @@ use GD::Polyline(); use Apache::lonnet; use lib '/home/httpd/lib/perl/'; use LONCAPA; -use LONCAPA::LWPReq; +use LONCAPA::LWPReq; # # Note: Math::Trig is included in the standard perl package for many distros. @@ -296,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'}); @@ -307,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"})) { @@ -372,7 +392,6 @@ sub handler { $polygon->addPt($x,$y); $added++; } - $image->setThickness($width); if ($added) { if ($open && lc($open) ne 'no') { @@ -466,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; }