rendered paste body#!/usr/bin/perl
# Basic PNG tEXt chunk parser
# Spec: http://www.w3.org/TR/PNG/
# Copyright (c) 2006 Omnix <omnix@punksbusted.com>
# This is licensed under the MIT Licence - see http://www.opensource.org/licenses/mit-license.html
open(IMAGE, '< ' . $ARGV[0]);
my $offset = 0;
my $buffer;
read(IMAGE, $buffer, 8, 0) or die('Prematurely reached EOF');
if ($buffer != "\x89\x50\x4E\x47\x0D\x0A\x1A\x0A") {
die("Invalid PNG image.");
}
while (1) {
read(IMAGE, $buffer, 4, 0) or die('Prematurely reached EOF');
$chunk_len = unpack('N', $buffer);
read(IMAGE, $chunk_type, 4, 0) or die('Prematurely reached EOF');
read(IMAGE, $chunk_data, $chunk_len, 0) or die('Prematurely reached EOF');
if ($chunk_type eq 'tEXt') {
my ($text_keyword, $text_string) = split(/\x00/, $chunk_data);
print "$text_keyword : $text_string\n";
exit;
}
read(IMAGE, $buffer, 4, 0) or die('Prematurely reached EOF'); # CRC
}