关于RGB颜色的问题,找到最简单,最简单的PHP转换代码,用于处理给定RGB色调的亮度/暗度。
想象一个变量$colorA
包含一个有效的六个字符RGB颜色,比如F7A100
,我们希望它们更轻和/或更暗:
$color = B1B100; // original RGB color manually set.
然后,在任何页面上,颜色都会变得更暗/更轻:
$colorX = someFunction($color, +10); // original color 10 steps lighter
$colorY = someFunction($color, -25); // original color 25 steps darker
你的解决方法是什么?保持RGB原样或首先将其更改为HSL?欢迎提示和建议。您的样品/代码也是受欢迎的。
这真正关注TINIES / SIMPLES / SHORTEST可能的代码,使相同的色调位更暗/更亮。
我故意不建议我的代码,因为我想在这里保持可能性。
答案 0 :(得分:4)
绝对最简单的解决方案是在颜色表示的每个部分添加一些常量(如1):[R, G, B]
。这是因为所有[R, G, B]
的最大值代表白色,而最小值代表黑色。在伪代码中(假设255是最大值,抱歉,我不知道PHP):
lighter(R, G, B) = [
min(255, R + 1),
min(255, G + 1),
min(255, B + 1)
]
你必须记住,虽然这种转换过于简单化,正确的实现方式是转换为HSL / HSB,增加H并转换回RGB。
答案 1 :(得分:2)
对于亮度的轻微更改,您可以将十六进制值转换为十进制,操纵它们并转换回十六进制,如下所示:
function alterBrightness($color, $amount) {
$rgb = hexdec($color); // convert color to decimal value
//extract color values:
$red = $rgb >> 16;
$green = ($rgb >> 8) & 0xFF;
$blue = $rgb & 0xFF;
//manipulate and convert back to hexadecimal
return dechex(($red + $amount) << 16 | ($green + $amount) << 8 | ($blue + $amount));
}
echo alterColor('eeeeee', -10); //outputs e4e4e4
请注意,此代码不会处理一种颜色的溢出 - 如果一个颜色值小于0或大于255,则会得到无效的颜色值。这应该很容易添加。
如果亮度发生剧烈变化,请转换为HSL并操纵亮度。
使用Drupal代码中的函数,可以这样做:
$hsl = _color_rgb2hsl(_color_unpack('eeeeee'));
$hsl[2] -= 10;
$rgb = _color_pack(_color_hsl2rgb($hsl));
echo $rgb; //outputs e4e4e4