如何使用PerlMagick替换任何非特定颜色的颜色?

时间:2010-02-28 10:23:02

标签: perl imagemagick

在经历了许多令人沮丧的挫折之后,我终于得到了一个版本的PerlMagick模块和我的ActivePerl 5.10.0 build 1005一起工作。现在我正在玩它来做一些非常基本的颜色替换。

我已经可以使用以下代码替换一种颜色,比如黑色,另一种颜色,比如说蓝色:

#!perl
 use strict;
 use warnings;
 use Image::Magick;

  my $image = Image::Magick->new;
  $image->Read('color-test.bmp');
  $image->Opaque(fill => 'blue', color => 'black');
  $image->Write('result.bmp');

但我想知道我是否可以用蓝色替换任何不是黑色的颜色。我希望并且认为有一些惯用的语法来实现这一点,所以我要求快速帮助:)任何想法?

一如既往地感谢任何指导/建议/意见:)

更新

@rjh,谢谢你的代码和信息:)我尝试了所有的一点点的吸引力,他们都像魅力一样工作!

无法运行旧版本。我的PerlMagick是6.5.4,但有一点适应性,它也是这样的:

  use strict;
  use warnings;
  use Image::Magick;

  my $image = Image::Magick->new;
  $image->Read('color-test.bmp');
     $image->Transparent(color=>'black');
     $image->Colorize(fill=>'blue');
     $image->Composite(image=>$image);
     $image->Write('result.bmp');

嗯,当然我喜欢你的第二个版本。这是超级的。这是我期待的语法,呵呵:)

第一个命令行版本也运行良好,虽然我没想到这个版本。

再次,谢谢!

1 个答案:

答案 0 :(得分:10)

在ImageMagick 6.3.7-10及更高版本中,您可以使用“+”形式的opaque来反转颜色选择。此命令将使用blue:

转换非黑色的任何内容
convert in.gif  -fill blue +opaque black   out.gif

在Perl中,这可以通过以下方式完成:

$image->Opaque(fill => 'blue', color => 'black', invert => 'True');

如果您只有旧版本,仍可以通过

完成
convert out.gif \
      \( +clone -matte -transparent black \
         -fill blue  -colorize 100% \) \
      -composite    in.gif

...我将留给您转换为Perl API。

来源:http://www.imagemagick.org/Usage/color/#opaque - 一般用于ImageMagick操作的有用资源。