您好我在php中显示颜色为十六进制值。是否可以通过从十六进制值中减去一个数字来改变颜色的阴影?我想要做的是显示生动的网页安全色,但如果选择我想要暗淡或淡化颜色。我知道我可以使用两种颜色但我可以使用数百种颜色。
要清楚#66cc00是亮绿色,#99ffcc是非常浅绿色。我减去什么来获得第二种颜色?是否有任何公式,因为我可以得到它。
感谢您的帮助
干杯
答案 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颜色空间。
一旦你有HSV,改变V组分使颜色变深或变浅,并改变S组分使颜色或多或少饱和或苍白。将S和V转换回RGB后调整。要使颜色Web安全,请将每个RGB通道四舍五入为51或0x33的倍数。