#!/usr/bin/perl -w use strict; use Image::Magick; my $image = Image::Magick->new; $image->Read($ARGV[0]) && warn "$_"; $image->Set(magick=>'RGB'); my $rows = 6; my $cols = 4; my $boxsize = 50; my @expected = ({name => "dark skin" ,r => 106, g => 82, b => 70} ,{name => "light skin" ,r => 184, g => 146, b => 128} ,{name => "blue sky" ,r => 101, g => 121, b => 153} ,{name => "foliage" ,r => 95, g => 107, b => 69} ,{name => "blue flower" ,r => 128, g => 127, b => 173} ,{name => "bluish green" ,r => 129, g => 188, b => 171} ,{name => "orange" ,r => 201, g => 123, b => 56} ,{name => "purplish blue",r => 77, g => 91, b => 166} ,{name => "moderate red" ,r => 173, g => 83, b => 96} ,{name => "purple" ,r => 86, g => 60, b => 104} ,{name => "yellow green" ,r => 166, g => 187, b => 75} ,{name => "orange yellow",r => 213, g => 160, b => 55} ,{name => "blue" ,r => 49, g => 65, b => 143} ,{name => "green" ,r => 99, g => 148, b => 80} ,{name => "red" ,r => 155, g => 52, b => 59} ,{name => "yellow" ,r => 227, g => 197, b => 52} ,{name => "magenta" ,r => 169, g => 85, b => 147} ,{name => "cyan" ,r => 61, g => 135, b => 167} ,{name => "white" ,r => 245, g => 245, b => 245} ,{name => "neutral 8" ,r => 200, g => 200, b => 200} ,{name => "neutral 6.5" ,r => 161, g => 161, b => 161} ,{name => "neutral 5" ,r => 120, g => 120, b => 120} ,{name => "neutral 3.5" ,r => 84, g => 84, b => 84} ,{name => "black" ,r => 52, g => 52, b => 52} ); my ($row,$col,$x,$y,$i,$j); my $box = 0; my ($rsum,$gsum,$bsum) = (0,0,0); ROW: for($row=0;$row<$rows;$row++) { COL: for($col=0;$col<$cols;$col++,$box++) { my $x = 100 + $row*145; my $y = 100 + $col*145; for($i=$x;$i<$x+$boxsize;$i++) { for($j=$y;$j<$y+$boxsize;$j++) { my ($r,$g,$b,$o) = split(/,/,$image->Get("pixel[$i,$j]")); $_ = int($_/256) for ($r,$g,$b,$o); my $e = $expected[$box]; if($i==$x && $j==$y) { print $e->{'name'},"\n"; print "Expected:\tr: $e->{'r'}\tg: $e->{'g'}\t $e->{'b'}\n"; print "Actual :\tr: $r\tg: $g\tb: $b\n"; } $rsum += $r - $e->{'r'}; $gsum += $g - $e->{'g'}; $bsum += $b - $e->{'b'}; } } } } my $samples = $boxsize * $boxsize * $rows * $cols; my $rdiff = int ($rsum / $samples); my $gdiff = int ($gsum / $samples); my $bdiff = int ($bsum / $samples); print "\nOverall Difference:\tr: $rdiff\tb: $bdiff\tg: $gdiff\n"; $image = Image::Magick->new; $image->Read($ARGV[1]); $image->Set(magick=>'RGB'); $image = $image->Fx(expression=>"1.0-r*($rdiff/255)",channel=>'red'); $image = $image->Fx(expression=>"1.0-g*($gdiff/255)",channel=>'green'); $image = $image->Fx(expression=>"1.0-b*($bdiff/255)",channel=>'blue'); unlink "out.jpg"; $image->Write("out.jpg");