--- loncom/homework/randomlabel.pm 2005/04/12 21:41:28 1.71 +++ loncom/homework/randomlabel.pm 2005/04/18 21:41:51 1.72 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # random labelling tool # -# $Id: randomlabel.pm,v 1.71 2005/04/12 21:41:28 foxr Exp $ +# $Id: randomlabel.pm,v 1.72 2005/04/18 21:41:51 foxr Exp $ # # Copyright Michigan State University Board of Trustees # @@ -59,6 +59,7 @@ use strict; use Apache::edit; use Apache::File(); use Apache::Constants qw(:common :http); +use Image::Magick; my %args; my $cgi_id; @@ -165,7 +166,7 @@ sub end_bgimg { } return $result; } - +my $scale_factor; # image scale factor. sub make_eps_image { my ($bgimg,$parstack,$safeeval,$depth)=@_; my ($path,$file) = &Apache::londefdef::get_eps_image($bgimg); @@ -179,6 +180,10 @@ sub make_eps_image { ' mm \epsffile{'.$path.$file. '}\setlength{\unitlength}{1mm}'."\n".' \begin{picture}('. $width_param.','.$height_param.')(0,-'.$height_param.')'."\n"; + my $magick = Image::Magick->new; + $magick->Read($bgimg); + my $initial_width = $magick->Get('width'); + $scale_factor = $width_param / $initial_width; return $result; } @@ -226,6 +231,24 @@ sub start_labelgroup { return $result; } +# +# Utility sub to compute the width of a label. +# +sub get_label_width { + my $label = shift; + &Apache::lonxml::debug("image label = $label"); + if (-e $label) { + &Apache::lonxml::debug("$label exists"); + } else { + &Apache::lonxml::debug("$label does not exist"); + } + my $magick = Image::Magick->new; + $magick->Read($label); + my $pixel_width = $magick->Get('width'); + return $pixel_width * $scale_factor; + + +} sub add_vars { my ($name,$order,$label,$labelorder,$value,$image,$safeeval) = @_; if (!defined($name) || $name eq '') { return; } @@ -309,7 +332,9 @@ sub end_labelgroup { } elsif ( $type eq 'image') { my ($path,$file) = &Apache::londefdef::get_eps_image($label); my $image_name = $path.$file; - $result .= '\includegraphics{' + my $label_width = get_label_width($label); + + $result .= '\includegraphics[width='.$label_width.'mm]{' .$image_name."}}\n"; &add_vars($gname,$i, $Apache::randomlabel::description[$idx_arr[$i]],