2010-02-28 5 views
3

Après de nombreuses frustrations, j'ai finalement eu une version du module PerlMagick qui fonctionne avec mon ActivePerl 5.10.0 build 1005. Maintenant, je suis en train de jouer avec pour effectuer une substitution de couleur très basique.Comment remplacer une couleur qui n'est pas une couleur spécifique à l'aide de PerlMagick?

Je peux déjà remplacer une couleur, par exemple, noir, avec un autre, disons, bleu, en utilisant le code suivant:

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

Mais je me demande si je peux remplacer une couleur qui n'est pas noir la couleur bleue. J'espère et pense qu'il y a une syntaxe idiomatique pour y arriver, alors je demande une aide rapide :) Des idées?

Merci comme toujours pour toute orientation/suggestions/commentaires :)

MISE À JOUR

@rjh, merci pour le code et les informations :) J'ai essayé « em tous avec un peu adpations et ils travaillent tous comme le charme!

Cette ancienne version ne peut pas être exécutée. Mon PerlMagick est 6.5.4, mais avec un peu adapation, cela fonctionne aussi comme ceci:

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

Eh bien, bien sûr, j'aime votre deuxième version. C'est super. C'est la syntaxe même que je m'attendais, hehe :)

Et la première version en ligne de commande fonctionne aussi bien même si je ne m'attendais pas à cette version.

Encore une fois, merci!

Répondre

10

Dans ImageMagick 6.3.7-10 et versions ultérieures, vous pouvez utiliser la forme '+' d'opaque pour inverser la sélection de couleur. Cette commande permet de convertir tout ce qui est pas noir, bleu:

convert in.gif -fill blue +opaque black out.gif 

En Perl, cela peut se faire via:

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

Si vous avez seulement une ancienne version, il peut encore être fait, par l'intermédiaire

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

... que je vais vous laisser convertir en API Perl.

Source: http://www.imagemagick.org/Usage/color/#opaque - une ressource utile pour les opérations ImageMagick en général.

+0

@rjh, je les ai tous essayés et ils ont tous travaillé comme le charme! Merci beaucoup! – Mike

Questions connexes