--- loncom/homework/imageresponse.pm 2003/07/31 20:38:12 1.32 +++ loncom/homework/imageresponse.pm 2003/08/01 14:22:07 1.33 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # image click response style # -# $Id: imageresponse.pm,v 1.32 2003/07/31 20:38:12 ng Exp $ +# $Id: imageresponse.pm,v 1.33 2003/08/01 14:22:07 ng Exp $ # # Copyright Michigan State University Board of Trustees # @@ -25,13 +25,15 @@ # # http://www.lon-capa.org/ # - +# July,August 2003 H. K. Ng +# #FIXME LATER assumes multiple possible submissions but only one is possible #currently package Apache::imageresponse; use strict; use Image::Magick; +use GD; BEGIN { &Apache::lonxml::register('Apache::imageresponse',('imageresponse')); @@ -312,6 +314,27 @@ sub start_image { return $result; } +sub get_image { + my ($imgsrc,$set_trans)=@_; + my $image; + if ($imgsrc !~ /\.(png|jpg|jpeg)$/i) { + my $conv_image = Image::Magick->new; + my $current_figure = $conv_image->Read('filename'=>$imgsrc); + $conv_image->Set('magick'=>'png'); + my @blobs=$conv_image->ImageToBlob(); + undef $conv_image; + $image = GD::Image->new($blobs[0]); + } else { + GD::Image->trueColor(1); + $image = GD::Image->new($imgsrc); + } + if ($set_trans && defined($image)) { + my $white=$image->colorExact(255,255,255); + if ($white != -1) { $image->transparent($white); } + } + return $image; +} + sub end_image { my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; my $result; @@ -325,25 +348,27 @@ sub end_image { my $y=$ENV{"form.HWVAL_$id:$temp.y"}; if (defined ($x) && defined ($y)) { &Apache::lonxml::debug("x and y defined as $x,$y"); - my $magickImage = Image::Magick->new; - my $currentImage = $magickImage->Read('/home/httpd/html'.$image); + my $currentImage = &get_image('/home/httpd/html'.$image,1); + if (! defined($currentImage)) { + &Apache::lonnet::logthis('Unable to create image object for '.$image); + return ''; + } + my $red; + if (!($red = $currentImage->colorResolve(255,0,0))) { + $red = $currentImage->colorClosestHWB(255,0,0); + } my $length = 6; - $currentImage = $magickImage->Draw(primitive=>'line', - stroke=>'red', - points=>($x-$length).','.($y-$length).' '. - ($x+$length).','.($y+$length)); - $currentImage = $magickImage->Draw(primitive=>'line', - stroke=>'red', - points=>($x-$length).','.($y+$length).' '. - ($x+$length).','.($y-$length)); - binmode STDOUT; - my ($graphExt) = ($image =~ /.*\.(.*)$/); - &Apache::lonxml::debug("graph mime type $graphExt"); - my $webImageName = "/prtspool/$ENV{'user.name'}_$ENV{'user.domain'}_".(time).'.'.$graphExt; #needs to be more random + $currentImage->line($x-$length,$y-$length,$x+$length,$y+$length,$red); + $currentImage->line($x-$length,$y+$length,$x+$length,$y-$length,$red); + + my ($nameWOext) = ($image =~ /^.*\/(.*)\..*$/); + &Apache::lonxml::debug("graph name $nameWOext"); + my $webImageName = "/prtspool/$ENV{'user.name'}_$ENV{'user.domain'}_". + $nameWOext.'.png'; #needs to be more random or specific my $newImageName = '/home/httpd'.$webImageName; - $currentImage = $magickImage->Write($graphExt.':'.$newImageName); - undef $magickImage; + my $imgfh = Apache::File->new('>'.$newImageName); + print $imgfh $currentImage->png; $image = $webImageName; } &Apache::lonxml::debug("out image is $image");