你会如何开发类似于described in this DabbleDB blog post的东西?
答案 0 :(得分:2)
刚回答kinda related SO question yesterday。其中的一些概念以及由此产生的test code (on git hub)可能是一个良好的开端。
如evolve所述,扫描图像中的每个像素(甚至只是边界)可能会占用大量资源。但是,在这种情况下(因为你想要识别的不仅仅是平均颜色),它可能是要走的路。将徽标大小调整为合理的大小有助于减少服务器负载,并且不应该真正影响输出。
更新:对于这些示例,假设已创建图像对象,并使用$width
{{1}确定了$height
和imagesx()
等等
背景颜色
我们需要做的第一件事就是找出徽标的背景颜色。通过使用角落像素,这就是第一个版本。
此处使用getimagesize()
查找角落颜色。或者,使用顶部参考答案的平均边框颜色方法。
imagecolorat()
<强>饱和度强>
事实证明,色彩理论有一种衡量趣味性的方法:饱和度。所以我们从徽标中抽出了一种有趣的颜色。使用相同颜色的边框和文字使得事情比我们想要的更单调,所以最后我们决定尝试抓住两种有趣的颜色,如果它们存在的话。
您可以使用imagecolorsforindex()
manual page处的RGB到HSL功能以及顶部提到的pixel scanning code来查找具有高饱和度的颜色值。
<强>亮度强>
我们再次转向色彩理论并意识到我们可以使用边框颜色的亮度来决定黑色或白色文本是否更合适。
此SO thread列出了不同的RGB到亮度计算。我不确定什么方法最好(或技术上正确)转换0-255 RGB图像。但是对于这个完成的事情(如果文本是黑暗或轻微的),我认为 并不重要。