您可以在 PHP 中获取图片直方图。您可以在此处找到更多信息和代码示例:http://php.net/manual/en/imagick.getimagehistogram.php
要将您的颜色映射到 html 名称,您可以遍历颜色数组并使用您正在寻找的颜色计算颜色距离。距离最小的颜色会给出最好的 html 名称。你可以在这里找到更多关于颜色距离的资源:@987654322@
每次处理每张新图片时都可能需要大量时间,因此更好的解决方案:
您处于 RGB 颜色空间中。这意味着您有 256x256x256 种不同的颜色。每种颜色都由 RGB 坐标定义 - http://www.w3schools.com/colors/colors_names.asp。例如,“aqua”具有 RGB 坐标 (0,255,255)。您的目标是通过名称命名 RGB 空间中的所有颜色,但您不需要为 RGB 空间中非常单一的颜色提供唯一名称,因为您无法通过眼睛区分每个细节(例如 (0,0,1) 和(0,0,2) 看起来一样)。因此,您可以指定所需的颜色名称列表:
$colorNames = array(
[0] => 'white', //#FFFFFF
[1] => 'red', //#FF0000
...
);
现在,为了快速将由坐标 (r,g,b) 给出的颜色 C 映射到颜色名称,您必须查找 $colorNames 数组中的索引对应于颜色 C。为此,您可以提前准备一个文件,其大小为 256*256*256 = 16MB。每个字节代表 RGB 空间中的一个点。字节的值是颜色在 $colorNames 数组中与颜色最相似的索引。如何创建文件(伪代码):
for every value of R coordinate
for every value of G coordinate
for every value of B coordinate
find which color name in $colorName has the smallest distance to coordinates (R,G,B)
store the index for this color name to file
现在你有了一个包含任何颜色的所有索引的文件。这意味着您现在所要做的,就是将任何颜色映射到名称,只需在该文件中读取一个字节,然后在数组中查找颜色名称。
open mapping file
read one byte on position (R*256*256 + G*256 + B)
this byte is the 'index' in colorNames array
read the color name (colorNames['index'])