首先,我不是指谷歌图片搜索!
我想让用户能够选择十六进制颜色值,然后以编程方式返回(从指定的网站/目录在线)图像,其中主色是他们指定的颜色(或接近它)。
是否有可以做到这一点的技术?我更喜欢PHP / MySQL,但如果它更简单,我愿意使用其他语言。
修改
采取了一些建议,我设法找到了这个:http://www.coolphptools.com/color_extract,它在从图像中提取最常见的颜色方面做得不错。
下一步是从提取的颜色到要搜索的颜色计算距离。我没有实现它的问题,除了我不清楚计算色距的最佳方法?
我已经搜索了这个网站并谷歌找到了具体的答案,但是干了。上面的工具将颜色提取为十六进制颜色代码。我目前正在将其转换为RGB并使用它们。
我应该尝试将RGB转换为Y'UV吗?我正在尝试使用:
sqrt(((r - r1) * .299)^2 + ((g - g1) * .587)^2 + ((b - b1) * .114)^2)
(根据答案:RGB to closest predefined color)
这不是很准确。 我应该用什么交换颜色距离公式,以便计算准确的颜色距离(对于人眼)?
答案 0 :(得分:1)
有趣。 第一个问题是:“图像的主色是什么?”也许是最像素的一个。你用同样颜色的相似色调做什么?你会围绕类似的颜色聚集吗?
我会这样实现它: 抓住搜索路径中的所有图片。聚集每个颜色中使用的颜色,最大的聚类是主色。您将不得不在群集大小和群集数量上玩一下。如果此颜色在搜索颜色的某个色调,饱和度和亮度范围内,则匹配。
答案 1 :(得分:0)
首先,我想知道你怎么能爬过网站/目录来搜索特定的图像颜色,除非你有一个很大的网站列表。如果它与您的问题无关,那就忽略它。
回到你的问题,我个人认为这也是一个有趣的问题。由于它需要相当多的研究,我只想指出一些想法供你参考。
您需要做的是获取用户指定的十六进制颜色并将其转换为RGB颜色,因为我知道PHP中的大多数图像功能仅适用于RGB。现在,如果您有一个可以搜索的目录列表,那么只需抓取它们并使用一些基本功能来获取所需网页的内容(例如file_get_contents或cURL)。获得特定网页的内容后,您需要使用DOM functions从该网页获取图片的网址(您可以使用:getElementsByTagName()和getAttribute()自行处理) 。现在假设您正在保存图像URL列表,现在您需要获取它们的颜色并尝试将它们与用户指定的颜色匹配(记住将所有颜色转换为RGB)。
在PHP中,我们有一个非常适合图像的convenient GD library。如果您的服务器支持GD2,那么您可以查看imagecolorclosest()。此函数“返回图像调色板中与指定RGB值”“”最接近“的颜色索引。请注意,该函数仅返回最接近的匹配(不完全匹配),因此您必须进行一些比较以选择正确的图像(我相信这很容易,因为您现在有RGB颜色,非常方便的值可以使用,比方说,使用一些减法和调整方法)。
此外,不仅图像,当你有一个特定的页面内容,你可以尝试搜索该页面的颜色方案(通过获取其“背景颜色”值),有很多细节,你可以得到和玩:)当然,图像的颜色与其页面的样式方案颜色有某种关联,从逻辑上看更广泛。
如果我说的不清楚,请不要犹豫评论我的回复:)
快乐的编码。