]> git.imager.perl.org - imager.git/blobdiff - fileformatdocs/pngdump.pl
1.005 release
[imager.git] / fileformatdocs / pngdump.pl
index 0a8905bbf11edd1ead6a62a959c3cb75256ac932..f2dcf249390570cef76ce21edd99d335108140c4 100644 (file)
@@ -29,6 +29,7 @@ unless ($head eq "\x89PNG\x0d\x0A\cZ\x0A") {
 }
 
 my $colour_type;
+my $bits;
 my $sline_len;
 my $sline_left = 0;
 my $row = 0;
@@ -54,10 +55,12 @@ while (my ($dlen, $data, $len, $type, $payload, $crc) = read_chunk($fh)) {
   Interlace: $inter
 EOS
     $colour_type = $ct;
-    my $channels = $ct == 2 ? 3 : $ct == 4 ? 2 : $ct == 6 ? 4 : 0;
+    $bits = $d;
+    my $channels = $ct == 2 ? 3 : $ct == 4 ? 2 : $ct == 6 ? 4 : 1;
     my $bitspp = $channels * $d;
     $sline_len = int((($w * $bitspp) + 7) / 8);
     ++$sline_len; # filter byte
+    print "  Line length: $sline_len\n";
   }
   elsif ($type eq 'sRGB') {
     print "  Rendering intent: ", ord($payload), "\n";
@@ -122,6 +125,20 @@ EOS
     my @when = unpack("nCCCCC", $payload);
     printf "  Date: %d-%02d-%02d %02d:%02d:%02d\n", @when;
   }
+  elsif ($type eq 'bKGD') {
+    if ($colour_type == 2 || $colour_type == 6) {
+      my @rgb = unpack("nnn", $payload);
+      printf "  Background: rgb$bits(%d,%d,%d)\n", @rgb;
+    }
+    elsif ($colour_type == 0 || $colour_type == 4) {
+      my $g = unpack("n", $payload);
+      printf "  Background: grey$bits(%d)\n", $g;
+    }
+    if ($colour_type == 3) {
+      my $index = unpack("C", $payload);
+      printf "  Background: index(%d)\n", $index;
+    }
+  }
   elsif ($type eq "IDAT" && $image) {
     $sline_len
       or die "IDAT before IHDR!?";