【问题标题】:How to mimic Dabble Color Schemes?如何模仿 Dabble 配色方案?
【发布时间】:2010-12-17 15:25:31
【问题描述】:

您将如何开发类似于described in this DabbleDB blog post 的东西?

【问题讨论】:

    标签: php colors color-scheme


    【解决方案1】:

    刚刚回复了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 图像。但是对于这样做的目的(文本是深色还是浅色),我认为这并不重要。

    【讨论】:

    • 刚要回应,应该注意的是,根据图像的大小,第二种方法将非常耗费服务器。
    • @evolve 扫描每个像素?密集的?是啊,你说得对。我更新了答案以反映这一点。对于“平均”颜色问题,最好减少到 1px。
    • @evolve:似乎有些 cmets / 答案被删除了,但我想我明白了。谢谢你的抬头! ;)
    猜你喜欢
    • 2022-01-13
    • 2011-09-26
    • 2015-04-09
    • 1970-01-01
    • 2022-06-12
    • 1970-01-01
    • 2019-04-22
    • 2010-12-28
    • 2012-02-12
    相关资源
    最近更新 更多