diff options
author | Jesse Luehrs <doy@tozt.net> | 2014-10-07 14:16:15 -0400 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2014-10-07 14:56:01 -0400 |
commit | 12392181b58a25b8f63410d10759457e070ad24e (patch) | |
tree | e8424be87489c0a50adebe814cc77063b80e8696 /lib | |
parent | c2372470164611b5597ea63faf8dcfe33381df39 (diff) | |
download | image-pnm-12392181b58a25b8f63410d10759457e070ad24e.tar.gz image-pnm-12392181b58a25b8f63410d10759457e070ad24e.zip |
support output in different formats from input
Diffstat (limited to 'lib')
-rw-r--r-- | lib/Image/PNM.pm | 32 |
1 files changed, 29 insertions, 3 deletions
diff --git a/lib/Image/PNM.pm b/lib/Image/PNM.pm index 5a97439..5136220 100644 --- a/lib/Image/PNM.pm +++ b/lib/Image/PNM.pm @@ -82,7 +82,16 @@ $self->{w} $self->{h} HEADER for my $row (@{ $self->{pixels} }) { - $data .= join(' ', map { $_ ? '0' : '1' } @$row) . "\n"; + $data .= join(' ', map { + my $val; + if (ref($_)) { + $val = $self->_to_greyscale(@$_); + } + else { + $val = $_; + } + $val * 2 > $self->{max} ? '0' : '1' + } @$row) . "\n"; } return $data; @@ -98,7 +107,14 @@ $self->{max} HEADER for my $row (@{ $self->{pixels} }) { - $data .= join(' ', @$row) . "\n"; + $data .= join(' ', map { + if (ref($_)) { + $self->_to_greyscale(@$_) + } + else { + $_ + } + } @$row) . "\n"; } return $data; @@ -114,7 +130,9 @@ $self->{max} HEADER for my $row (@{ $self->{pixels} }) { - $data .= join(' ', map { join(' ', @$_) } @$row) . "\n"; + $data .= join(' ', map { + ref($_) ? join(' ', @$_) : "$_ $_ $_" + } @$row) . "\n"; } return $data; @@ -259,4 +277,12 @@ sub _make_next_word { }; } +sub _to_greyscale { + my $self = shift; + my ($r, $g, $b) = @_; + # luma calculation + # https://en.wikipedia.org/wiki/YUV + int(0.2126*$r + 0.7152*$g + 0.0722*$b + 0.5) +} + 1; |