1

您将如何开发类似于此 DabbleDB 博客文章中描述的内容

4

1 回答 1

2

昨天刚刚回答了一个相关的 SO 问题。那里的一些概念以及生成的测试代码(在 git hub 上)可能是一个好的开始。

正如进化所提到的,扫描图像中的每个像素(甚至只是边界)可能是资源密集型的。但是,在这种情况下(因为您想要识别的不仅仅是平均颜色),它可能是要走的路。将徽标调整为合理的大小将有助于减少服务器负载,并且不会真正影响输出。

更新对于这些示例,假设已创建图像对象并$width$height使用imagesx(),getimagesize()等确定。

背景颜色

我们需要做的第一件事是找出徽标的背景颜色。这就是第一个版本所做的全部,通过使用角像素。

此处用于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()您可以使用手册页中的 RGB 到 HSL 功能以及顶部提到的像素扫描代码来查找具有高饱和度的颜色值。

亮度

我们再次转向色彩理论,并意识到我们可以使用边框颜色的亮度来决定黑色或白色文本是否更合适。

这个SO 线程列出了不同的 RGB 到亮度计算。我不确定哪种方法最好(或技术上正确)来转换 0-255 RGB 图像。但是对于这样做的目的(文本应该是深色还是浅色),我认为这并不重要

于 2009-11-17T21:46:31.510 回答