if (my ($cmdarg) = grep { $cmds[$_] eq '-area' } 0 .. $#cmds) {
# replace option by permillage crop
my @dim = map { $_ / 1000 } split /\D/, $cmds[$cmdarg + 1];
+ $dim[$_] ||= 1 for 2, 3; # optional end
+ push @dim, $dim[2 + $_] - $dim[$_] for 0, 1; # add width, height
splice @cmds, $cmdarg, 2, (
-set => 'option:distort:viewport' => sprintf(
- '%%[fx:w*%s]x%%[fx:h*%s]+%%[fx:w*%s]+%%[fx:h*%s]',
- ($dim[2] || 1) - $dim[0], # width = x2 - x1
- ($dim[3] || 1) - $dim[1], # height = y2 - y1
- @dim[0, 1] # offset = x1,y1
+ '%%[fx:%s]x%%[fx:%s]+%%[fx:%s]+%%[fx:%s]',
+ "w*$dim[4]", "h*$dim[5]", # width x height
+ "w*$dim[0]", "h*$dim[1]", # x+y offset
),
-distort => SRT => 0, # noop transform to apply viewport
);