#!/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();