Perl - Image :: Magick新图像与RGB背景

时间:2011-08-10 13:43:54

标签: perl imagemagick

我正在尝试使用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 个答案:

答案 0 :(得分:3)

您可以这样做:

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

这假设您正在使用q深度为16位的ImageMagick。如果只有8位,那么这个:

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

成为这个:

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

虽然我相信在@rgbdec中使用十进制值有一种更简单的方法,但也许有人会发布它。