#!/usr/local/bin/perl -w
###########################################
# graphdraw - Draw RGB line values 
# Mike Schilli, 2008 (m@perlmeister.com)
###########################################
use strict;
use Imager;
use Imager::Plot;
use Log::Log4perl;

my($file) = @ARGV;
die "No file given" unless defined $file;

my $img = Imager->new();
$img->read( file => $file ) or 
  die $img->errstr();

$img->filter(
  type   => "gaussian", 
  stddev => 10 ) or die $img->errstr;

my $y     = int( $img->getheight() / 2 );
my $width = $img->getwidth();

my $data = {};

for my $x (0..$width-1) {
  push @{ $data->{ x } }, $x;

  my $color = $img->getpixel( x => $x,
                              y => $y );
  my @components = $color->rgba();
  for my $color_name (qw(red green blue)) {
    push @{ $data->{ $color_name } },
         shift @components;
    }
}

my $plot = Imager::Plot->new(
  Width  => 550,
  Height => 350,
  GlobalFont =>
  '/usr/share/fonts/truetype/msttcorefonts/Verdana.ttf');

for my $color_name (qw(red green blue)) {
  $plot->AddDataSet(
    X => $data->{x}, 
    Y => $data->{$color_name},
    style => { 
      marker => { 
        size   => 2,
        symbol => 'circle',
        color => Imager::Color->new($color_name),
      }
    }
  );
}

my $graph = Imager->new(
        xsize => 600, 
        ysize => 400);

$graph->box(filled => 1, color => 'white');

    # Add text
$plot->{'Ylabel'} = 'RGB Values';
$plot->{'Xlabel'} = 'X-Pixel';
$plot->{'Title'}  = 'RGB-Distribution';

$plot->Render(
  Image => $graph,
  Xoff  => 40, 
  Yoff  => 370);

$graph->write(file => "graph.png") or die $graph->errstr();
