]> wagner.pp.ru Git - oss/imgwww.git/commitdiff
Moved from imagemagick to netpbm for scaling master
authorVictor Wagner <vitus@wagner.pp.ru>
Sun, 13 Mar 2016 14:51:46 +0000 (17:51 +0300)
committerVictor Wagner <vitus@wagner.pp.ru>
Sun, 13 Mar 2016 14:51:46 +0000 (17:51 +0300)
imagedir

index 3ca94031475af9f5ddbc1741b34c7b9b1c830559..dbcde4bccb593d1e0ae7820594d8f547f6919f81 100755 (executable)
--- a/imagedir
+++ b/imagedir
@@ -58,6 +58,8 @@ Title. If none given, directory name is used.
 =cut
 
 use vars qw($opt_t $opt_n $opt_l $opt_f);
 =cut
 
 use vars qw($opt_t $opt_n $opt_l $opt_f);
+our %decoders=('image/gif'=>'giftopnm','image/tiff'=>'tifftopnm','image/jpeg'=>'djpeg');
+
 getopts("t:lnf");
 
 my $dir = $opt_t || (split ("/",cwd()))[-1];
 getopts("t:lnf");
 
 my $dir = $opt_t || (split ("/",cwd()))[-1];
@@ -103,6 +105,7 @@ print OUT "</table></body></html>\n";
 close OUT;
 
 sub rescale {
 close OUT;
 
 sub rescale {
+  no locale;
   my ($name,$out_dir,$maxsize,$info) = @_;
   my ($w,$h) = dim($info);
   if ($w<$maxsize && $h<$maxsize) {
   my ($name,$out_dir,$maxsize,$info) = @_;
   my ($w,$h) = dim($info);
   if ($w<$maxsize && $h<$maxsize) {
@@ -110,10 +113,21 @@ sub rescale {
        return $name;
   }    
   my $result = "$out_dir/$name";
        return $name;
   }    
   my $result = "$out_dir/$name";
+  $result .= ".jpg" unless $result=~/\.jpe?g$/i;
   if ( ! -f $result || -M $name < -M $result) {
     print STDERR "  $out_dir...";
   if ( ! -f $result || -M $name < -M $result) {
     print STDERR "  $out_dir...";
-
-    system "convert", "-geometry", $maxsize."x".$maxsize,$_,$result;
+       my $scale;
+       if ($w > $h) {
+               $scale = $maxsize*1.0/$w;
+       } else {
+               $scale = $maxsize*1.0/$h;
+       }
+       my $ftype= $info->{file_media_type};
+       die "Unknown image type for $name: $ftype\n"
+               if (not exists $decoders{$ftype});
+       my $decoder=$decoders{$ftype};
+    system "$decoder \"$name\" | pnmscale -xscale ". $scale . " -yscale " .
+               "$scale |cjpeg > $result";
     print STDERR "\b\b\b ";
   } 
   return $result;
     print STDERR "\b\b\b ";
   } 
   return $result;