X-Git-Url: http://git.shiar.net/sheet.git/blobdiff_plain/d93f65ecf4924bc5351568ba2fc70b87e45143f7..HEAD:/tools/mkimgthumb diff --git a/tools/mkimgthumb b/tools/mkimgthumb index 217b773..e9d6eb2 100755 --- a/tools/mkimgthumb +++ b/tools/mkimgthumb @@ -1,18 +1,51 @@ #!/usr/bin/env perl use 5.014; use warnings; +use lib $0 =~ s{[^/]+$}{..}r; # project root +use Shiar_Sheet::ImagePrep '1.03'; + +our $VERSION = '1.00'; + +my %opt; + +if (@ARGV and $ARGV[0] =~ /^-/) { + require Getopt::Long; + Getopt::Long->import(qw( 2.33 :config gnu_getopt )); + GetOptions(\%opt, + 'jpg=s', + 'webp=s', + ) or exit 64; +} + +%opt or %opt = ( + jpg => '300x200', + webp => '630x420@30', +); + +my @ffs; +for (keys %opt) { + push @ffs, my $ff = [$_]; + my $r = $opt{$_}; + push @{$ff}, -quality => $1 if $r =~ s/@(\d+)//; + push @{$ff}, -resize => !/\dx\d+$/ ? $_ : ("$_^", -extent => $_) + for split / /, $r; +} + +my $target = '..'; +$target = pop @ARGV if @ARGV >= 2 and -d $ARGV[-1]; my $failcount = 0; for my $src (@ARGV) { my ($name, @cmds) = split /:(? or next; } s/\\(.)/$1/g for @cmds; - say $name; + print ':'; if (@cmds and $cmds[0] =~ /^\d/) { # crop shorthand from initial dimension argument @@ -21,13 +54,23 @@ for my $src (@ARGV) { if @crop > 2; unshift @cmds, -chop => "$crop[0]%x$crop[1]%"; } - unshift @cmds, -gravity => 'northwest' if @cmds; - push @cmds, '-strip', -gravity => 'north', -quality => 60; - my @cmdwebp = (-resize => '630x420^', -extent => '630x420', -quality => 30); - my @cmdjpeg = (-resize => '300x200^', -extent => '300x200'); - system(convert => $src, @cmds, @cmdjpeg, "../$name.jpg" ) == 0 and - system(convert => $src, @cmds, @cmdwebp, "../$name.webp") == 0 - or $failcount += warn "error creating $name.jpg from $src\n"; + push @cmds, -gravity => 'north'; + eval { + my $image = Shiar_Sheet::ImagePrep->new($src); + for (@ffs) { + my ($ff, @ffcmds) = @{$_}; + print " $ff"; + $image->convert("$target/$name.$ff", [@cmds, @ffcmds]); + } + 1; + } or do { + say ' FAILED'; + warn ref $@ eq 'ARRAY' ? $@->[1] : $@ if $@; + $failcount++; + }; +} +continue { + say ''; } exit $failcount;