#!/usr/bin/perl -w # Convert PGM image to text, outputting space for each white pixel and # "X" for everything else. use strict; # Parse header lines. my $line; defined($line = <>) or die "Empty input.\n"; $line =~ /^P5/ or die "Not a PGM.\n"; defined($line = <>) or die "Incomplete header.\n"; $line =~ /^(\d+)\s+\d+/ or die "Missing image size.\n"; my $width = $1; defined($line = <>) or die "Incomplete header.\n"; $line =~ /^255/ or die "Unsupported bit depth\n"; # Convert pixels. my $x = 0; while( $line = <> ) { foreach my $p (unpack "C*", $line) { print($p == 255 ? " " : "X"); if( ++$x == $width ) { print "\n"; $x = 0; } } }