之前的例子在 $frequency_list_of_values 变量的键中显示了小数
数组
(
[1 / 0 / 1] => 157295
[0.83529411764706 / 0.87843137254902 / 0.82352941176471] => 1
[0.80392156862745 / 0.84705882352941 / 0.7843137254902] => 2
[0.8156862745098 / 0.84705882352941 / 0.78823529411765] => 1
...
所以我做了一些更改,这将改善结果,对于那些想要知道图像中哪些颜色占主导地位的人,显示带有准确 rgb 值的键
<?php
$file_to_grab_with_location = $imagepath; $imagick_type = new \Imagick();
$file_handle_for_viewing_image_file = fopen($file_to_grab_with_location, 'a+');
$imagick_type->readImageFile($file_handle_for_viewing_image_file);
$frequency_list_of_values = array();
$image_resolution_width = $imagick_type->getImageWidth();
$image_resolution_height = $imagick_type->getImageHeight();
print("图像分辨率:宽度 - $image_resolution_width / 高度 - $image_resolution_height<br><br>");
for($y = 0; $y < $image_resolution_height; $y++)
{
for($x = 0; $x < $image_resolution_width; $x++)
{
$pixel_to_examine = $imagick_type->getImagePixelColor($x,$y);
if(isset($frequency_list_of_values[$pixel_to_examine->getColorAsString()]) == TRUE)
{
$temp = $frequency_list_of_values[$pixel_to_examine->getColorAsString()];
$temp++;
$frequency_list_of_values[$pixel_to_examine->getColorAsString()] = $temp;
}
else
{
$frequency_list_of_values[$pixel_to_examine->getColorAsString()] = 1;
}
}
arsort($frequency_list_of_values);
}
print("<pre>");
print_r($frequency_list_of_values);
print("</pre>");
?>
结果
图像分辨率:宽度 - 1965 / 高度 - 998
数组
(
[srgba(255,0,255,0)] => 451654
[srgb(54,52,53)] => 281069
[srgb(177,51,54)] => 130449
[srgb(236,50,55)] => 64001
...
对于非常大的图像,此方法速度很慢,因为它会逐像素分析。