#!/usr/bin/perl

require "cgi-lib.pl";
use Image::Magick;

$cgi_lib::writefiles = "/tmp";
$cgi_lib'maxdata = 10000000; # 10Mo

$seuil = 1;

$ret = &ReadParse(\%cgi_data,\%cgi_name,\%cgi_type,\%localname);

if (!defined $ret) {
  &CgiDie("Error in reading and parsing of CGI input");
} elsif (!$ret) {
  &CgiDie("Missing parameters\n");
} elsif (!defined $cgi_data{'format'} && !defined $cgi_data{'invert'}) {
  &CgiDie("Data missing\n");
}

$p = new Image::Magick;
#$p->Read("$cgi_data{'userfile'}");
$p->Resize(width=>72, height=>28, blur=>0.5);
$p->Quantize(colors=>2,colorspace=>gray);

$width=$p->Get('columns');
$height=$p->Get('rows');
$depth=$p->Get('depth');

if ($cgi_data{'invert'}) { $p->Negate(gray=>True); }

$first_pixel = $p->Get("pixel[0,0]");

if ($cgi_data{'format'} eq 'image')
{
	&print_image;
} elsif ($cgi_data{'format'} eq 'gif') {
	&print_gif;
} else {
	&print_ascii;
}

sub print_image
{
print "Content-type: text/plain\n\n";
for ($i=1;$i<($height+1);$i++)
{
	printf ("%2i: ", $i);
	for ($j=1;$j<($width+1);$j++)
	{
		$x = $j - 1;
		$y = $i - 1;
		$pixel = $p->Get("pixel[$x,$y]");
		if ($pixel eq $first_pixel)
		{
			print " ";
		} else {
			print "*";
		}
	}
	print "\n";
}
}

sub print_gif
{
print "Content-type: image/gif\n\n";
$p->Write('gif:-');
}

sub print_ascii
{
print "Content-type: text/html\n\n";
for ($i=1;$i<($height+1);$i++)
{
	printf("%2i; ", $i);
	$noir = 0;
	$blanc = 0;
	for ($j=1;$j<($width+1);$j++)
	{
		$x = $j - 1;
		$y = $i - 1;
		$pixel = $p->Get("pixel[$x,$y]");
		if ($pixel eq $first_pixel)
		{
			if ($noir != 0)
			{
				printf ("%2i N, ",$noir);
				$noir = 0;
			}
			$blanc++;
		} else {
			if ($blanc != 0)
			{
				printf ("%2i B, ",$blanc);
				$blanc = 0;
			}
			$noir++;
		}
	}
	if ($blanc != 0) { print "$blanc B"; }
	if ($noir != 0) { print "$noir N"; }

	print "<BR>\n";
	if (!($i % 2)) { print "<BR>\n"; }
}
}

