【问题标题】:Choosing suitable background / foreground colour using PHP使用 PHP 选择合适的背景/前景色
【发布时间】:2011-02-07 05:52:47
【问题描述】:

我正在寻找为什么要计算合适的背景颜色和超出顶部的文本颜色,显然我需要考虑可读性和可访问性。

我需要从数组中选择两种颜色,颜色以十六进制表示形式存储。

#CC9966
#996633
#FFCC99
#CCCC99
#000000
#333333
#666633
#663333
#CC9933
#FFCCCC

我可以使用像 GD / imageMagick 这样的 PHP 库吗?

任何建议(请注意我使用的是 PHP)

【问题讨论】:

    标签: php colors imagemagick gdlib


    【解决方案1】:

    首先,我认为您应该看看Particletree 的这篇出色的博文。

    话虽如此,我会使用他们的 smarty_modifier_contrast() 函数并对其进行一些修改以满足您的特定需求,例如:

    function color_contrast($bgcolor, $color1, $color2, $color3, ...)
    {
        return (hexdec($bgcolor) > 0xffffff / 2) ? min(array_slice(func_get_args(), 1)) : max(array_slice(func_get_args(), 1));
    }
    

    因此,您只需使用任意随机颜色作为背景(不要忘记删除#),然后传递所有其他颜色到数组,在这种情况下,我使用了可变数量的参数,但您可以更改它以使其接受单个颜色数组 - 然后它将根据$bgcolor 自动选择最暗或最亮的颜色并提供足够好的对比度以提高可读性:

    function color_contrast($bgcolor, $colors = array())
    {
        return (hexdec($bgcolor) > 0xffffff / 2) ? min($colors) : max($colors);
    }
    

    要选择$bgcolor,您可以像我之前所说的那样随机选择使用第二个函数来帮助您完成此任务,例如saturationluminance,即真的取决于你在寻找什么。

    【讨论】:

      【解决方案2】:

      选择随机颜色对于可读性和可访问性通常不是一个好主意,因此我建议您重新考虑您的设计。或者至少将文本限制为只有黑色或白色。

      如果这不是一个选项,那么我建议计算两种颜色之间的“距离”,该距离大约等于颜色之间的视觉差异,因此也与可读性有关。

      我会使用distance = abs(2*(r1-r2) + 3*(g1-g2) + (b1-b2)),然后过滤掉任何距离不够高的组合。这应该确保您最终在明亮的背景上获得深色,或者在深色背景上获得明亮的颜色,这几乎是良好可读性的先决条件,并确保色盲者也能看到两种明显不同的色调。颜色分量的权重不同,因为它们对总感知亮度有不同的影响。

      【讨论】:

        【解决方案3】:

        将每种颜色分解为其 RGB 分量,将 0x80(或其他类似值,可能是 0x66)添加到每个分量,用 0xff 进行掩码,并在表中找到最接近的值。

        【讨论】:

        • 你的意思是像 $newRed = (($rgb['red'] + 0x80) * 0xFF);其中 $rgb['red'] 类似于 163
        猜你喜欢
        • 2011-09-05
        • 2018-03-01
        • 1970-01-01
        • 2013-08-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多