首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PerlMagick:从直方图()输出中使用QueryColorname()

PerlMagick:从直方图()输出中使用QueryColorname()
EN

Stack Overflow用户
提问于 2014-12-04 02:16:32
回答 1查看 177关注 0票数 2

我想要得到唯一颜色的直方图在一个图像颜色名称或他们的十六进制代码。

我无法使用QueryColorname方法将直方图方法输出值转换为颜色名称或十六进制代码;它总是返回黑色,不返回十六进制代码。

这可能是由于(65535 . 65535)结果范围从直方图()方法到我无法转换成(0 .255),这是Querycolorname()方法的可接受范围。

代码语言:javascript
复制
#!/usr/bin/perl
use Image::Magick;

$image=Image::Magick->new();
$image->ReadImage('Sun.jpeg'); 

my @histogram = $image->Histogram();
print "Red\tGreen\tBlue\tOpacity\tCount\tName\n";
for(my $i=0; $i<=29; $i++){ #Get 5 unique colors
   print "$histogram[$i]\t";
   if (($i+1)%5 == 0){ #Array elements of unique color
      my $name = $image->QueryColorname('rgb16($histogram[$i-4],$histogram[$i-3],$histogram[$i-    2],$histogram[$i-1])');
      print "$name\n";
   }
}

结果就像,

红绿蓝不透明度计数名称 0 0 0 16134黑色 257 257 257 0 27黑人 0 257 0 0 303黑色 257 0 0 0 2 86黑色 257 257 0 0 8黑色 71 0 0 0 82黑色

http://www.imagemagick.org/script/perl-magick.php中的方法描述

EN

回答 1

Stack Overflow用户

发布于 2015-03-21 14:26:54

首先,当您在变量周围使用单引号时,它们不会被展开。QueryColorname看到一个可能转换为零的字符串,这就是为什么所有颜色都是“黑色”的原因。

第二:我在docu中没有看到rgb16,而且我认为它不符合您的要求。相反,你必须缩小到8位。

把这两者结合起来,我提议为内部的if-Block这样的东西:

代码语言:javascript
复制
my $colVec = "rgb(";
$colVec .= int($histogram[$i-4]/65535*256) . ",";
$colVec .= int($histogram[$i-3]/65535*256) . ",";
$colVec .= int($histogram[$i-2]/65535*256) . ",";
$colVec .= $histogram[$i-1] . ")";
print $image->QueryColorname($colVec) . "\n";
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27285153

复制
相关文章

相似问题

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