Beefy Boxes and Bandwidth Generously Provided by pair Networks
Keep It Simple, Stupid

Re: Replace colors in an image

by tonyc (Friar)
on Oct 05, 2005 at 00:06 UTC ( [id://497440]=note: print w/replies, xml ) Need Help??

in reply to Replace colors in an image

A not so simple way of doing this in Imager:

#!perl -w use strict; use Imager; my $from = shift; my $to = shift; my $in = shift; my $out = shift or die "Usage: $0 fromcolor tocolor inimage outimage\n"; my $from_color = Imager::Color->new($from) or die "Cannot convert fromcolor $from into a color: ", Imager->errs +tr, "\n"; my $to_color = Imager::Color->new($to) or die "Cannot convert tocolor $to into a color: ", Imager->errstr, +"\n"; my $img = Imager->new; $img->read(file=>$in) or die "Cannot read image $in: ", $img->errstr, "\n"; my $result = replace_color($img, $from_color, $to_color) or die "Cannot replace colors: ", Imager->errstr, "\n"; $result->write(file=>$out) or die "Cannot write image $out: ", $result->errstr, "\n"; sub replace_color { my ($img, $from_color, $to_color) = @_; my ($from_red, $from_green, $from_blue) = $from_color->rgba; my ($to_red, $to_green, $to_blue) = $to_color->rgba; my $rpnexpr = <<'EOS'; x y getp1 !pix @pix red from_red eq @pix green from_green eq @pix blue from_blue eq and and to_red to_green to_blue rgb @pix ifp EOS my %constants = ( from_red => $from_red, from_green => $from_green, from_blue => $from_blue, to_red => $to_red, to_green => $to_green, to_blue => $to_blue, ); return Imager::transform2({ rpnexpr => $rpnexpr, constants => \%constants }, $img); }

Log In?

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://497440]
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others meditating upon the Monastery: (1)
As of 2024-05-23 20:00 GMT
Find Nodes?
    Voting Booth?

    No recent polls found