六角网颜色

时间:2010-04-24 19:44:49

标签: php html colors hex math

您好我在php中显示颜色为十六进制值。是否可以通过从十六进制值中减去一个数字来改变颜色的阴影?我想要做的是显示生动的网页安全色,但如果选择我想要暗淡或淡化颜色。我知道我可以使用两种颜色但我可以使用数百种颜色。

要清楚#66cc00是亮绿色,#99ffcc是非常浅绿色。我减去什么来获​​得第二种颜色?是否有任何公式,因为我可以得到它。

感谢您的帮助

干杯

6 个答案:

答案 0 :(得分:5)

十六进制颜色由6个十六进制数字组成。前两位数字用于红色,第二位用于绿色,最后两位用于蓝色。在阴影内, 00 是没有颜色, FF 是颜色的最高值。因此,#FF0000 将是鲜红色,没有绿色或蓝色,#00CCFF 将是非常蓝色和一点绿色,完全没有红色。

您提供的示例颜色实际上具有不同的红色,绿色和蓝色组成。 #66CC00 主要是绿色,有些是红色,而#99FFCC 主要是绿色,有些是蓝色和红色。

您应该将颜色分解为红色,绿色和蓝色组件,然后再将它们转换为十进制,将两者平均,然后转换回来:

#66 CC 00 - > 102 204 0

#99 FF CC - > 153 255 204

两者之间的平均值: 128 230 102 #80E666

找到中间颜色后,您可以近似最接近的网页安全颜色:#99FF66

可以找到一个十六进制和十进制之间的转换器来自己here

Here is a PHP script可以满足您的需求。这是一个基于上述方法的JavaScript脚本(相关hex to decimal conversion in JS):

color1 = "#66CC00";
color2 = "#99FFCC";

r1 = parseInt(color1.substring(1,3), 16);
g1 = parseInt(color1.substring(3,5), 16);
b1 = parseInt(color1.substring(5,7), 16);
r2 = parseInt(color2.substring(1,3), 16);
g2 = parseInt(color2.substring(3,5), 16);
b2 = parseInt(color2.substring(5,7), 16);

r3 = (Math.round((r1 + r2)/2)).toString(16);
g3 = (Math.round((g1 + g2)/2)).toString(16);
b3 = (Math.round((b1 + b2)/2)).toString(16);

color3 = "#" + r3 + g3 + b3;

答案 1 :(得分:2)

进一步解释:

#FFFFFF,完全白。

它实际上由3个单独的颜色值Red Green和Blue组成。

FF(255,全红),FF(255,全绿),FF(255,全蓝)

如果你想要一个完整的红色你会改为使用#FF0000(255,0,0)

颜色值从0到255,您可以组合颜色值以获得最终颜色。

答案 2 :(得分:1)

理解颜色的变化确实很有帮助,但是如果你只想对颜色进行着色,here就是我在php.net上发现的颜色。还没试过(还)坚韧,希望它适合你的需要。

答案 3 :(得分:0)

这称为十六进制基数:

1 2 3 4 5 6 7 8 9 A B C D E F

十六进制(16)基数中的“E”是十进制(10)基数中的“14”

66cc00(16)== 6736896(10)

99ffcc(16)== 10092492(10)

答案 4 :(得分:0)

Web颜色由红色,绿色和蓝色值指定。每个组件都是从00(0)到FF(255)的值。元件越多,组件就会越亮。如果所有三个组件都相同,则会从黑色(#000000)到白色(#ffffff)获得灰色阴影。

所以在你的第一个例子中有一些红色和很多绿色。在你的第二种颜色中,每种颜色都会使整个颜色变浅。绿色仍然是主要成分,但这就是为什么它是浅色的。

要从一种颜色更改为另一种颜色,您需要改变每个组件的值,但并不总是从另一个颜色中减去一个值。

从第一种颜色到第二种颜色,你想要实现什么目标?

答案 5 :(得分:0)

网页颜色采用RGB格式。要在不影响色调的情况下影响颜色的饱和度和值,必须转换为HSV颜色空间。

RGB to HSV in PHP

一旦你有HSV,改变V组分使颜色变深或变浅,并改变S组分使颜色或多或少饱和或苍白。将S和V转换回RGB后调整。要使颜色Web安全,请将每个RGB通道四舍五入为51或0x33的倍数。