我正在尝试使用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 . ")")发布于 2011-08-10 13:50:51
你可以这样做:
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中只使用十进制值有一种更简单的方法,但也许有人会这样做。
https://stackoverflow.com/questions/7011783
复制相似问题