word/edit: crop coordinates separate from convert parameters
authorMischa POSLAWSKY <perl@shiar.org>
Wed, 5 Jan 2022 00:04:53 +0000 (01:04 +0100)
committerMischa POSLAWSKY <perl@shiar.org>
Mon, 7 Feb 2022 17:42:33 +0000 (18:42 +0100)
Move -area value into a distinct image column crop32:

UPDATE word SET image = jsonb_insert(
image #- '{convert,0}' #- '{convert,0}',
'{crop32}', image->'convert'->1
)
WHERE image->'convert'->>0 = '-area';

UPDATE word SET image = jsonb_insert(
image #- '{convert,2}' #- '{convert,2}',
'{crop32}', image->'convert'->3
)
WHERE image->'convert'->>2 = '-area'
AND image->'convert'->>0 = '-gravity';

Remaining usage may be influenced by preceding options and need manual
inspection.

Shiar_Sheet/ImagePrep.pm
word/edit.plp

index 2bd4cd9e2448add5354e8ec000635350a96120c5..04a4270f5ac20cb87ce2be362bbfdd8d81bf3473 100644 (file)
@@ -31,14 +31,15 @@ sub dimensions ($imgpath) {
        return split /\s/, $xy, 3;
 }
 
-sub generate ($imgpath, $thumbpath, $cmds) {
+sub generate ($imgpath, $thumbpath, $opt) {
        if (not -e $$imgpath) {
                return !-e $thumbpath || unlink $thumbpath;
        }
-       $cmds //= [];
-       $imgpath->convert($thumbpath, $cmds, '300x200') and # low-res cover
+       my @cmds = @{$opt->{convert} // []};
+       unshift @cmds, -area => $_ for $opt->{crop32} || ();
+       $imgpath->convert($thumbpath, \@cmds, '300x200') and # low-res cover
        $imgpath->convert($thumbpath =~ s/\.jpg$/.webp/r,
-               [@{$cmds}, -quality => 40], '600x400' # higher dpi tradeoff
+               [@cmds, -quality => 40], '600x400' # higher dpi tradeoff
        );
 }
 
index 426fb5c281e577f9fbe9d0a458f345df9f341d7c..9af73cdb3737e3cfbb6bed374f447f0ddf4809d0 100644 (file)
@@ -111,6 +111,7 @@ my %wordcol = (
        convert => {-label => 'Convert options', -json => 'image', -multiple => 1, -src => sub {
                return "data/word/32/$_[0]->{id}.jpg";
        }},
+       crop32  => {-label => 'Crop 3:2', -json => 'image'},
        story   => {-label => 'Story', type => 'textarea', hidden => 'hidden'},
 );
 
@@ -218,7 +219,7 @@ elsif (defined $post{form}) {{
        $reimage++ if $fields{rethumb};  # force refresh
        if ($reimage) {
                eval {
-                       $image->generate($wordcol{convert}->{-src}->($row), $imagecol->{convert});
+                       $image->generate($wordcol{convert}->{-src}->($row), $imagecol);
                } or do {
                        my ($warn, @details) = ref $@ ? @{$@} : $@;
                        Alert([ "Thumbnail image not generated", $warn ], @details);