summaryrefslogtreecommitdiffstats
path: root/lib/Image/PNM.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Image/PNM.pm')
-rw-r--r--lib/Image/PNM.pm32
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;