#!/usr/bin/perl # Basic PNG tEXt chunk parser # Spec: http://www.w3.org/TR/PNG/ # Copyright (c) 2006 Omnix # 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 }