+my @info = eval {
+ require Image::ExifTool;
+ my $exif = Image::ExifTool->new->ImageInfo($file);
+ return (
+ " $exif->{MIMEType}",
+ $exif->{ImageSize} ? " $exif->{ImageSize} ($exif->{Megapixels}MP)" : (),
+ $exif->{ColorType} ? " $exif->{BitDepth}bpp $exif->{ColorType}" : (),
+ );
+} or warn $@;
+
+open my $pgm, '-|', convert => (
+ -compress => 'none',
+ '+distort' => SRT => '0,0 1,.56 0',
+ -thumbnail => $size || '66x23',
+ $file => 'pgm:-'
+) or die $!;
+<$pgm> eq "P2\n" or do {
+ say for @info;
+ exit 1;
+};
+<$pgm>; <$pgm>; # ignore depth, dimensions
+
+my @ch = split //, " .:coO@";
+while (<$pgm>) {