summaryrefslogtreecommitdiff
path: root/lib/Katana/Image/Elem.rakumod
blob: 3109e8226905e9da6cf3da2b036c9e0450b9a74a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
use v6.d;

use Katana::Exec::Command;

unit module Katana::Image:api<1>;

class Elem is export {
  has Str $.basename;
  has Str $!source;
  has Str $!dist-dir;
  has Str $.camera;

  submethod BUILD(IO::Path :$source, Str :$dist-dir) {
    $!basename = $source.basename;
    $!source = $source.path;
    $!dist-dir = $dist-dir;
  }

  method generate(Int :$thumb-geometry, Str :$bg-blur) {
    my $thumb = "$!dist-dir/thumb/{$.basename}";
    ⁉ [|<convert -auto-orient -geometry>, $thumb-geometry, $!source, $thumb];

    my $blur = "$!dist-dir/blur/{$.basename}";
    ⁉ [|<convert -flip -geometry>, $thumb-geometry/4, '-blur', $bg-blur, $thumb, $blur];

    my $large = "$!dist-dir/large/{$.basename}";
    ⁉ ['cp', $!source, $large];
  }

  method get-camera-model {
    my %exif = read-exif-info "$!dist-dir/large/{$.basename}";
    my $make = %exif<Make> ?? %exif<Make> !! '';
    my $model = %exif{'Camera Model Name'} ?? %exif{'Camera Model Name'} !! '';
    $model ~~ s/$make //; # Don't stotter
    $model = 'Unknown camera' if $model eq '';
    $!camera = "$make $model".trim;
  }

  method tag(Str $class) {
    "<img class='{$class}' src='./{$class}/{$.basename}' />"
  }
}