【发布时间】:2010-12-17 15:25:31
【问题描述】:
您将如何开发类似于described in this DabbleDB blog post 的东西?
【问题讨论】:
标签: php colors color-scheme
您将如何开发类似于described in this DabbleDB blog post 的东西?
【问题讨论】:
标签: php colors color-scheme
刚刚回复了kinda related SO question yesterday。那里的一些概念以及由此产生的test code (on git hub) 可能是一个好的开始。
正如evolve 所提到的,扫描图像中的每个像素(甚至只是边界)可能会占用大量资源。但是,在这种情况下(因为您想要识别的不仅仅是平均颜色),它可能是要走的路。将徽标调整为合理的大小将有助于减少服务器负载,并且不会真正影响输出。
更新:对于这些示例,假设已创建图像对象,并且已使用 imagesx()、getimagesize() 等确定了 $width 和 $height。
背景颜色
我们需要做的第一件事是找出徽标的背景颜色。这就是第一个版本所做的一切,使用角像素。
这里使用imagecolorat() 查找角颜色。或者,使用顶部参考答案中的平均边框颜色方法。
$color = imagecolorat($image, 0, 0); //do this for each corner
$rgb = imagecolorsforindex($image, $color); //convert each color to a RGB array
//average colors
饱和度
事实证明,色彩理论有一种衡量趣味性的方法:饱和度。所以我们从标志中提取了一个有趣的颜色。对边框和文本使用相同的颜色会使事情变得比我们想要的更单调,所以最后我们决定尝试抓住两种有趣的颜色(如果它们存在的话)。
您可以使用imagecolorsforindex() manual page 以及顶部提到的pixel scanning code 处的 RGB 到 HSL 函数来查找具有高饱和度的颜色值。
亮度
我们再次转向色彩理论,并意识到我们可以使用边框颜色的亮度来决定黑色或白色文本更适合。
SO thread 列出了不同的 RGB 到亮度计算。我不确定哪种方法最好(或技术上正确)来转换 0-255 RGB 图像。但是对于这样做的目的(文本是深色还是浅色),我认为这并不重要。。
【讨论】: