dieren: generate images using common ImagePrep module
[sheet.git] / tools / mkimgthumb
index 0e9d86eb834a633d8f9bf1ff115a54136c093b16..8f0097abba417291cdb3bd5bf682c29e2302fb15 100755 (executable)
@@ -1,18 +1,40 @@
 #!/usr/bin/env perl
 use 5.014;
 use warnings;
+use lib $0 =~ s{[^/]+$}{..}r; # project root
+use Shiar_Sheet::ImagePrep '1.03';
 
 my $failcount = 0;
 
 for my $src (@ARGV) {
-       my ($name, @cmds) = split /:/, $src =~ s/\.\w+$//r;
+       my ($name, @cmds) = split /:(?<!\\:)/, $src =~ s/\.(\w+)\z//r;
+       my $ext = $1 // '*';
        next if $name =~ m/\./;
+       unless (-e $src) {
+               ($src) = grep {-e} glob qq<"$name"{,:*}.$ext> or next;
+       }
+       s/\\(.)/$1/g for @cmds;
        say $name;
-       unshift @cmds, -gravity => 'northwest';
-       push @cmds, -resize => '300x200^', -gravity => 'north', -extent => '300x200';
-       push @cmds, '-strip', -quality => '60%';
-       system(convert => @cmds, $src => "../$name.jpg") == 0
-               or $failcount += warn "error creating $name.jpg from $src\n";
+
+       if (@cmds and $cmds[0] =~ /^\d/) {
+               # crop shorthand from initial dimension argument
+               my @crop = split /\D/, shift @cmds;
+               unshift @cmds, -gravity => 'southeast', -chop => "$crop[2]%x$crop[3]%"
+                       if @crop > 2;
+               unshift @cmds, -chop => "$crop[0]%x$crop[1]%";
+       }
+       push @cmds, -gravity => 'north';
+       my @cmdwebp = (-resize => '630x420^', -extent => '630x420', -quality => 30);
+       my @cmdjpeg = (-resize => '300x200^', -extent => '300x200');
+       eval {
+               my $image = Shiar_Sheet::ImagePrep->new($src);
+               $image->convert("../$name.jpg",  [@cmds, @cmdjpeg]);
+               $image->convert("../$name.webp", [@cmds, @cmdwebp]);
+       } or do {
+               warn "error creating image:\n";
+               warn ref $@ eq 'ARRAY' ? $@->[1] : $@ if $@;
+               $failcount++;
+       };
 }
 
 exit $failcount;