#!/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; print ':'; 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'; 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;