[LON-CAPA-cvs] cvs: loncom /homework randomlabel.pm

foxr lon-capa-cvs@mail.lon-capa.org
Mon, 18 Apr 2005 21:41:52 -0000


foxr		Mon Apr 18 17:41:52 2005 EDT

  Modified files:              
    /loncom/homework	randomlabel.pm 
  Log:
  Add correct image scaling to labels so that they don't look out of proportion
  on 'tex' target.
  
  
Index: loncom/homework/randomlabel.pm
diff -u loncom/homework/randomlabel.pm:1.71 loncom/homework/randomlabel.pm:1.72
--- loncom/homework/randomlabel.pm:1.71	Tue Apr 12 17:41:28 2005
+++ loncom/homework/randomlabel.pm	Mon Apr 18 17:41:51 2005
@@ -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 Apache::edit;
 use Apache::File();
 use Apache::Constants qw(:common :http);
+use Image::Magick;
 
 my %args;
 my $cgi_id;
@@ -165,7 +166,7 @@
     }
     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 @@
 	' 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 @@
     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 @@
 	    } 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]],