gpt4 book ai didi

php - 如何在 PHP 中通过对比反转 RGB 十六进制值

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:43:47 26 4
gpt4 key购买 nike

到目前为止,我有以下代码:

function hexrgb_invert($hex) {
$arr = str_split($hex, 2);
foreach ($arr as &$value) {
$c = base_convert($value, 16, 10);
$value = str_pad(base_convert(255 - $c, 10, 16), 2, '0', STR_PAD_LEFT);
}
return implode('', $arr);
}

问题:我需要根据对比度反转颜色。上面的函数对某些事情有效,但对其他事情无效。

示例:如果输入是 9d702f,输出将是 9d702f。 (2 种对比度较低的颜色)

我没有在 StackOverflow 上的其他地方找到任何运气,因为大多数答案似乎使用了我已经在使用的相同算法。


更多示例:

假设我正在尝试找到 #FFFFFF(白色)的对比对立面。这非常简单,因为白色是原色,所以可以很容易地计算出它的反义色。 (上面的函数将完美地工作。) #FFFFFF 的反面当然是 #000000 (黑色),当你比较这两种颜色时,你会得到 contrast ratio of 21:1

但是,如果我们尝试在颜色 #808080 上使用上面的相同函数,它将为我们提供颜色 #7F7F7F。这两种颜色几乎相同,并且有一个 contrast ratio of only 1.01:1 。这是因为越接近十六进制 80(十进制 128),该函数可以提供的对比度就越小。

#808080 的特定情况下,颜色 #000000 将提供 the most constrast at 5.32:1


解决方案:

function rgb_best_contrast($r, $g, $b) {
return array(
'r' => ($r < 128) ? 255 : 0,
'g' => ($g < 128) ? 255 : 0,
'b' => ($b < 128) ? 255 : 0
);
}

最佳答案

str_pad添加字符默认在右侧——其可选的$pad_type参数默认为STR_PAD_RIGHT

你需要强制它在左边添加零:

str_pad(base_convert(255 - $c, 10, 16), 2, '0', STR_PAD_LEFT)

您的示例详细信息:

  • 输入:6ff060,仅考虑 G 值:$c = 0xf0(十进制:240)。
  • 255 - 240 = 15(十六进制:f)
  • base_convert(255 - $c, 10, 16) 产生:'f'(作为字符串!)
  • str_pad(base_convert(255 - $c, 10, 16), 2, '0')右边加一个零,从而生成' f0'
  • 设置 $pad_type = STR_PAD_LEFT 解决了这个问题。

关于php - 如何在 PHP 中通过对比反转 RGB 十六进制值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38063499/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com