From 12392181b58a25b8f63410d10759457e070ad24e Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Tue, 7 Oct 2014 14:16:15 -0400 Subject: support output in different formats from input --- lib/Image/PNM.pm | 32 +++++++++++++++++++++++++++++--- 1 file changed, 29 insertions(+), 3 deletions(-) (limited to 'lib') 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; -- cgit v1.2.3-54-g00ecf