2010-04-24 135 views
4

嗨我在php中顯示一個顏色作爲十六進制值。是否可以通過從十六進制值中減去一個數字來改變顏色的陰影?我想要做的事情顯示生動的網頁安全色,但如果選擇,我想沉悶或減輕顏色。我知道我可以使用兩種顏色的色調,但我可以使用數百種潛在的色彩。十六進制網頁顏色

要清楚#66cc00是鮮綠色,#99ffcc是非常淡綠色。我減去什麼來得到第二種顏色?有沒有任何公式,因爲我可以得到它。

感謝您的幫助

乾杯

回答

0

這就是所謂的十六進制基:

1 2 3 4 5 6 7 8 9 ABCDEF

「E」 以十六進制(16)基十進制(10)爲「14」基

66cc00(16)== 6736896(10)

99ffcc(16)== 10092492(10)

2

爲了進一步解釋這一:

#FFFFFF,全白。

它實際上由3個獨立的顏色值紅色綠色和藍色組成。

FF(255,全是紅色),FF(255,滿綠),FF(255,滿藍)

如果你想要一個完整的紅色,你會改用#FF0000(255,0,0)

顏色值從0到255,然後組合顏色值以獲得最終顏色。

5

十六進制顏色由6個十六進制數字組成。前兩位用於紅色陰影,後兩位用於綠色,後兩位用於藍色。在色調內,是沒有顏色,並且FF是顏色的最高值。所以,#FF0000將是鮮紅色,沒有綠色或藍色,並且#00CCFF將是非常藍色和一點綠色,根本沒有紅色。

您給出的示例顏色實際上有不同的紅色,綠色和藍色化妝。 #66CC00大多是綠色的,有些紅色,而#99FFCC大多是綠色的,有些藍色和紅色。

你應該改掉你的顏色到他們的紅色,綠色和藍色分量將它們轉換成十進制之前,平均兩,再轉換回:

#66 CC 00 - >

#99 FF CC - >

在兩者之間平均::#80E666

找到在兩者之間的顏色,可以近似最接近的Web安全顏色後:#99FF66

十六進制和十進制自己做,可以發現here之間的轉換器。

Here is a PHP script這就是你所需要的。這是基於關閉上述方法(相關hex to decimal conversion in JS)的一個JavaScript腳本:

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

網頁安全的顏色是過去的事情。他們是一個剩餘的時間只能顯示256種顏色。 – Jacco 2010-04-24 20:33:32

+0

這是真的。設計爲僅處理網頁安全色彩的硬件等同於將非移動網站設計爲800x600。 – 2010-04-24 21:24:00

0

網頁顏色由他們的紅色,綠色和藍色值規定。每個分量是從00(0)到FF(255)的值。組件越多,組件出現的亮度越高。如果所有三個組件都相同,則會從黑色(#000000)變爲白色(#ffffff)。

所以在你的第一個例子中有一些紅色和很多綠色。在第二種情況下,每種顏色都會使整個顏色更輕。綠色仍然是主要的組成部分,但這就是爲什麼它是一種蒼白的顏色。

要從一種顏色更改爲另一種顏色,您需要更改每個組件的值,但並不總是像減去另一個值那樣簡單。

你想從你的第一個顏色獲得第二個顏色?

1

它真的有助於理解顏色發生了什麼,但如果您只是對顏色進行着色感興趣,here就是我在php.net上找到的。還沒有嘗試過(但)艱難,希望它適合您的需求。

0

Web顏色爲RGB。要影響顏色的飽和度和值而不影響色調,必須將其轉換爲HSV顏色空間。

RGB to HSV in PHP

一旦你有HSV,改變V分量,使一種顏色變暗或變亮,改變S成分以使顏色或多或少飽和或蒼白。調整S和V後,再轉換回RGB。爲了使網頁顏色安全,請將每個RGB通道四捨五入爲51或0x33的倍數。