首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Perl - Image::Magick New Image和RGB背景

问Perl - Image::Magick New Image和RGB背景
EN

Stack Overflow用户
提问于 2011-08-10 13:43:54
回答 1查看 842关注 0票数 3

我正在尝试使用Image::Magick创建一个新的图像,并将背景色设置为从前一步检索的RGB值。然而,所有正在写出来的只是一个黑色的图像。我知道RGB值是正确的,因为我验证了这些值。下面是我尝试过的一个例子。

代码语言:javascript
复制
# 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();

我也试过:

代码语言:javascript
复制
$img->Colorize(fill=>\@rgb, opacity=>1);

有什么想法吗?

编辑:

这个成功了。不确定是否有任何更清洁的方法:

代码语言:javascript
复制
ReadImage("xc:rgb(" . $rgb[0]*100 . "," . $rgb[1]*100 . "," . $rgb[2]*100 . ")")
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-08-10 13:50:51

你可以这样做:

代码语言:javascript
复制
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位,那么这个:

代码语言:javascript
复制
    $rgbhex[$i] = sprintf("%X", $rgbdec[$i]/256); 

变成这样:

代码语言:javascript
复制
    $rgbhex[$i] = sprintf("%X", $rgbdec[$i]); 

尽管我相信在@rgbdec中只使用十进制值有一种更简单的方法,但也许有人会这样做。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7011783

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档