2010-02-28 28 views
3

在經歷了許多令人頭痛的挫折之後,我終於獲得了PerlMagick模塊的一個版本,與我的ActivePerl 5.10.0 build 1005一起工作。現在我正在玩它來做一些非常基本的顏色替換。如何使用PerlMagick替換任何不是特定顏色的顏色?

我已經可以替代一個顏色,比如黑色,另一個,比方說,藍色,使用下面的代碼:

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

但我想,如果我可以代替任何顏色不是黑色顏色是藍色。我希望並認爲有一些慣用的語法來實現這一點,所以我要求一個快速的幫助:)任何想法?

感謝像往常一樣進行任何指導意見/建議/評論:)

UPDATE

@rjh,謝謝你的代碼和信息:)我試圖把它們都帶一點adpations和他們都像魅力一樣工作!

舊版本無法運行。我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'); 

嗯,當然,我喜歡你的第二個版本。它超級。這是我期待的語法,嘿嘿:)

而且第一個命令行版本也運行良好,雖然我不期待這個版本。

再次,謝謝!

回答

10

在ImageMagick 6.3.7-10及更高版本中,您可以使用不透明的「+」形式來反轉顏色選擇。此命令將其轉換任何不是黑色,藍色:

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操作的有用資源。

+0

@rjh,我試過了,他們都像魅力一樣工作!非常感謝! – Mike 2010-02-28 12:51:49