Perl - Image :: Magick Новое изображение с фоном RGB - PullRequest
3 голосов
/ 10 августа 2011

Я пытаюсь создать новое изображение, используя Image :: Magick, и установить для цвета фона значение RGB, полученное на предыдущем шаге.Тем не менее, все, что пишется, это черное изображение.Я знаю, что значения RGB верны, поскольку я их проверил.Ниже приведен пример того, что я попробовал.

# Read RGB value at pixel 2,11 in another image
my $swatchImg = new Image::Magick;    
$swatchImg->Read($swatchPath)
my @rgb = $swatchImg->GetPixel(x=>2,y=>11); 
undef $swatchImg;   

# Create a new image, with the background set to the rgb value retrieved above 
my $img = Image::Magick->new;
$img->Set(size=>"50x50");
$img->Set(background=>\@rgb);
$img->ReadImage();

Я также попробовал:

$img->Colorize(fill=>\@rgb, opacity=>1);

Есть идеи?


Редактировать:

Это сработало.Не уверен, что есть более чистый подход:

ReadImage("xc:rgb(" . $rgb[0]*100 . "," . $rgb[1]*100 . "," . $rgb[2]*100 . ")")

1 Ответ

3 голосов
/ 10 августа 2011

Вы можете сделать что-то вроде этого:

my $rgbdec = $swatchImg->Get("pixel[2,11]");
my @rgbdec = split (/,/, $rgbdec);
my @rgbhex;
## Convert decimal @rgbdec (0..65536) to hex @rgbhex (00..FF)
for (my $i=0; $i<=3; $i++) {
    $rgbhex[$i] = sprintf("%X", $rgbdec[$i]/256); 
    if ($rgbhex[$i] eq "0") { $rgbhex[$i] = "00"; }
}
my $hexcolor = $rgbhex[0].$rgbhex[1].$rgbhex[2];

my $img = Image::Magick->new(size=>"50x50);
$img->Read("xc:#$hexcolor");

Предполагается, что вы используете ImageMagick с глубиной q 16 бит. Если только 8 бит, то это:

    $rgbhex[$i] = sprintf("%X", $rgbdec[$i]/256); 

становится таким:

    $rgbhex[$i] = sprintf("%X", $rgbdec[$i]); 

Хотя я считаю, что есть простой способ использовать десятичные значения в @rgbdec, возможно, кто-то опубликует это.

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