diff options
author | Jesse Luehrs <doy@tozt.net> | 2014-10-07 16:10:11 -0400 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2014-10-07 16:10:11 -0400 |
commit | dbb201d59ead46aec1d280fe753dcb36fdd767a0 (patch) | |
tree | 3ea55a16ea0bc0f6837cdc9f72e566f21b7bc8b1 | |
parent | 3b5bc86786a56b9437d1e6ac5a3de786110d731e (diff) | |
download | image-pnm-dbb201d59ead46aec1d280fe753dcb36fdd767a0.tar.gz image-pnm-dbb201d59ead46aec1d280fe753dcb36fdd767a0.zip |
implement P6
-rw-r--r-- | lib/Image/PNM.pm | 43 | ||||
-rw-r--r-- | t/P1.t | 7 | ||||
-rw-r--r-- | t/P2.t | 7 | ||||
-rw-r--r-- | t/P3.t | 7 | ||||
-rw-r--r-- | t/P4.t | 7 | ||||
-rw-r--r-- | t/P5.t | 7 | ||||
-rw-r--r-- | t/P6.t | 77 | ||||
-rw-r--r-- | t/data/P6.ppm | bin | 0 -> 194 bytes |
8 files changed, 155 insertions, 0 deletions
diff --git a/lib/Image/PNM.pm b/lib/Image/PNM.pm index 4deca51..42121da 100644 --- a/lib/Image/PNM.pm +++ b/lib/Image/PNM.pm @@ -191,6 +191,24 @@ HEADER return $data; } +sub _as_string_P6 { + my $self = shift; + + my $data = <<HEADER; +P6 +$self->{w} $self->{h} +$self->{max} +HEADER + + for my $row (@{ $self->{pixels} }) { + $data .= pack("C*", map { + ref($_) ? @$_ : ($_, $_, $_) + } @$row); + } + + return $data; +} + sub _parse_string { my $self = shift; my ($string) = @_; @@ -345,6 +363,31 @@ sub _parse_pnm_P5 { } } +sub _parse_pnm_P6 { + my $self = shift; + my ($next_line) = @_; + + chomp (my $max = $next_line->()); + die "Invalid max color value: $max" + unless $max =~ /^[0-9]+$/ && $max > 0; + $self->{max} = $max; + + my $next_word = $self->_make_next_bitfield($next_line, 0); + + $self->{pixels} = []; + for my $i (1..$self->{h}) { + my $row = []; + for my $j (1..$self->{w}) { + push @$row, [ + $next_word->(), + $next_word->(), + $next_word->(), + ]; + } + push @{ $self->{pixels} }, $row; + } +} + sub _make_next_word { my $self = shift; my ($next_line, $ws) = @_; @@ -67,4 +67,11 @@ P5 \x01\x01\x01\x01\x01\x01\x01\x01\x00\x00\x01\x01\x01\x00\x01\x01\x00\x01\x00\x01\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x01\x01\x01\x01\x00\x00\x01\x01\x01\x01\x00\x01\x01\x01\x01\x01\x01 IMAGE +is($image->as_string('P6') . "\n", <<IMAGE); +P6 +6 8 +1 +\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x00\x00\x00\x00\x00\x00\x01\x01\x01\x01\x01\x01\x01\x01\x01\x00\x00\x00\x01\x01\x01\x01\x01\x01\x00\x00\x00\x01\x01\x01\x00\x00\x00\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x00\x00\x00\x00\x00\x00\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x00\x00\x00\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01 +IMAGE + done_testing; @@ -67,4 +67,11 @@ P5 \xff\xff\xff\xff\xff\xff\xff\xff\x4e\x4e\xff\xff\xff\x00\xff\xff\x00\xff\x00\xff\xff\xff\xff\x00\x00\x36\x36\x36\x36\x00\x00\xff\xff\xff\xff\x00\x00\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff IMAGE +is($image->as_string('P6') . "\n", <<IMAGE); +P6 +6 8 +255 +\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4e\x4e\x4e\x4e\x4e\x4e\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\xff\xff\xff\xff\xff\xff\x00\x00\x00\xff\xff\xff\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x36\x36\x36\x36\x36\x36\x36\x36\x36\x36\x36\x36\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff +IMAGE + done_testing; @@ -67,4 +67,11 @@ P5 \xff\xff\xff\xff\xff\xff\xff\xff\x4e\x4e\xff\xff\xff\x00\xff\xff\x00\xff\x00\xff\xff\xff\xff\x00\x00\x36\x36\x36\x36\x00\x00\xff\xff\xff\xff\x00\x00\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff IMAGE +is($image->as_string('P6') . "\n", <<IMAGE); +P6 +6 8 +255 +\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x54\xff\x00\x54\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\xff\xff\xff\xff\xff\xff\x00\x00\x00\xff\xff\xff\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\xff\x00\x00\xff\x00\x00\xff\x00\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff +IMAGE + done_testing; @@ -67,4 +67,11 @@ P5 \x01\x01\x01\x01\x01\x01\x01\x01\x00\x00\x01\x01\x01\x00\x01\x01\x00\x01\x00\x01\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x01\x01\x01\x01\x00\x00\x01\x01\x01\x01\x00\x01\x01\x01\x01\x01\x01 IMAGE +is($image->as_string('P6') . "\n", <<IMAGE); +P6 +6 8 +1 +\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x00\x00\x00\x00\x00\x00\x01\x01\x01\x01\x01\x01\x01\x01\x01\x00\x00\x00\x01\x01\x01\x01\x01\x01\x00\x00\x00\x01\x01\x01\x00\x00\x00\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x00\x00\x00\x00\x00\x00\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x00\x00\x00\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01 +IMAGE + done_testing; @@ -67,4 +67,11 @@ P5 \xff\xff\xff\xff\xff\xff\xff\xff\x4e\x4e\xff\xff\xff\x00\xff\xff\x00\xff\x00\xff\xff\xff\xff\x00\x00\x36\x36\x36\x36\x00\x00\xff\xff\xff\xff\x00\x00\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff IMAGE +is($image->as_string('P6') . "\n", <<IMAGE); +P6 +6 8 +255 +\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4e\x4e\x4e\x4e\x4e\x4e\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\xff\xff\xff\xff\xff\xff\x00\x00\x00\xff\xff\xff\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x36\x36\x36\x36\x36\x36\x36\x36\x36\x36\x36\x36\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff +IMAGE + done_testing; @@ -0,0 +1,77 @@ +#!/usr/bin/env perl +use strict; +use warnings; +use Test::More; + +use Image::PNM; + +my $image = Image::PNM->new('t/data/P6.ppm'); + +is($image->width, 6); +is($image->height, 8); +is($image->max_pixel_value, 255); +is_deeply($image->raw_pixel(1, 2), [0, 84, 255]); +is_deeply($image->pixel(4, 1), [1, 0, 0]); + +is($image->as_string('P1'), <<IMAGE); +P1 +6 8 +0 0 0 0 0 0 +0 0 1 1 0 0 +0 1 0 0 1 0 +1 0 0 0 0 1 +1 1 1 1 1 1 +1 0 0 0 0 1 +1 0 0 0 0 1 +0 0 0 0 0 0 +IMAGE + +is($image->as_string('P2'), <<IMAGE); +P2 +6 8 +255 +255 255 255 255 255 255 +255 255 78 78 255 255 +255 0 255 255 0 255 +0 255 255 255 255 0 +0 54 54 54 54 0 +0 255 255 255 255 0 +0 255 255 255 255 0 +255 255 255 255 255 255 +IMAGE + +is($image->as_string('P3'), <<IMAGE); +P3 +6 8 +255 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 0 84 255 0 84 255 255 255 255 255 255 255 +255 255 255 0 0 0 255 255 255 255 255 255 0 0 0 255 255 255 +0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 +0 0 0 255 0 0 255 0 0 255 0 0 255 0 0 0 0 0 +0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 +0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 +IMAGE + +is($image->as_string('P4') . "\n", <<IMAGE); +P4 +6 8 +\x00\x30\x48\x84\xfc\x84\x84\x00 +IMAGE + +is($image->as_string('P5') . "\n", <<IMAGE); +P5 +6 8 +255 +\xff\xff\xff\xff\xff\xff\xff\xff\x4e\x4e\xff\xff\xff\x00\xff\xff\x00\xff\x00\xff\xff\xff\xff\x00\x00\x36\x36\x36\x36\x00\x00\xff\xff\xff\xff\x00\x00\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff +IMAGE + +is($image->as_string('P6') . "\n", <<IMAGE); +P6 +6 8 +255 +\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x54\xff\x00\x54\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\xff\xff\xff\xff\xff\xff\x00\x00\x00\xff\xff\xff\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\xff\x00\x00\xff\x00\x00\xff\x00\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff +IMAGE + +done_testing; diff --git a/t/data/P6.ppm b/t/data/P6.ppm Binary files differnew file mode 100644 index 0000000..347f26b --- /dev/null +++ b/t/data/P6.ppm |