簡體   English   中英

PerlMagick:使用Histogram()輸出中的QueryColorname()

[英]PerlMagick: Use QueryColorname() from Histogram() output

我想在具有顏色名稱或其十六進制代碼的圖像中獲得唯一顏色的直方圖。

我無法使用QueryColorname方法將直方圖方法的輸出值轉換為顏色名稱或十六進制代碼; 它始終返回黑色,不返回十六進制代碼。

可能是由於histogram()方法的(0 ... 65535)結果范圍,我無法將其轉換為Querycolorname()方法的可接受范圍(0 .. 255)。

#!/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 0 16134黑色
257257257257 0 27黑色
0257 00303黑色
257 0 0 0 286黑色
257257 0 0 8黑色
71 0 0 0 82黑色

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

首先:當您在變量周圍使用單引號時,它們不會擴展。 QueryColorname看到一個可能會轉換為零的字符串。 這就是為什么所有顏色都是“黑色”的原因。

第二:我在文檔中沒有看到rgb16 ,我想它沒有做您想要的。 相反,您必須縮小到8位

將兩者放在一起,我為內部的if-Block提出了這樣的內容:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM