Как заменить любой цвет, который не является определенным цветом, с помощью PerlMagick? - PullRequest
3 голосов
/ 28 февраля 2010

После многих неприятных разочарований у меня наконец-то появилась одна версия модуля PerlMagick, работающая с моей сборкой 1005 ActivePerl 5.10.0. Теперь я играю с ней, чтобы сделать некоторые базовые замены цвета.

Я уже могу заменить один цвет, скажем, черный, другим, скажем, синим, используя следующий код:

#!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, спасибо ВАМ за код и информацию :) Я попробовал их все с небольшими пристрастиями, и все они работают как шарм!

Эта старая версия не может быть запущена. Мой 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 Ответ

10 голосов
/ 28 февраля 2010

В 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 в целом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...