16进制的颜色值通常表示为#FFFFFF,当前也有缩减为#FFF,前提是两位两位必需相同,例如#FEFEFE这种,就不能进行缩减。而RGB的颜色格式是由3组0~255的数字构成,分别代表红(Red)、绿(Green)、蓝(Blue)的色值。
那么,将16进制转换为RGB色值,其实就是分别把#号后面的两位作为一个单位转换成十进制。
代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
/**
* 将16进制颜色转换为RGB
* author www.zzvips.com
*/
function hex2rgb( $hexColor ){
$color = str_replace ( '#' , '' , $hexColor );
if ( strlen ( $color )> 3){
$rgb = array (
'r' =>hexdec( substr ( $color ,0,2)),
'g' =>hexdec( substr ( $color ,2,2)),
'b' =>hexdec( substr ( $color ,4,2))
);
} else {
$r = substr ( $color ,0,1). substr ( $color ,0,1);
$g = substr ( $color ,1,1). substr ( $color ,1,1);
$b = substr ( $color ,2,1). substr ( $color ,2,1);
$rgb = array (
'r' =>hexdec( $r ),
'g' =>hexdec( $g ),
'b' =>hexdec( $b )
);
}
return $rgb ;
}
|
另一种写法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
/**
* 十六进制转RGB
* @param string $color 16进制颜色值
* @return array
*/
public static function hex2rgb( $color ) {
$hexColor = str_replace ( '#' , '' , $color );
$lens = strlen ( $hexColor );
if ( $lens != 3 && $lens != 6) {
return false;
}
$newcolor = '' ;
if ( $lens == 3) {
for ( $i = 0; $i < $lens ; $i ++) {
$newcolor .= $hexColor [ $i ] . $hexColor [ $i ];
}
} else {
$newcolor = $hexColor ;
}
$hex = str_split ( $newcolor , 2);
$rgb = [];
foreach ( $hex as $key => $vls ) {
$rgb [] = hexdec( $vls );
}
return $rgb ;
}
|
RGB颜色和十六进制颜色互转
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
|
/**
* RGB转 十六进制
* @param $rgb RGB颜色的字符串 如:rgb(255,255,255);
* @return string 十六进制颜色值 如:#FFFFFF
*/
function RGBToHex( $rgb ){
$regexp = "/^rgb\(([0-9]{0,3})\,\s*([0-9]{0,3})\,\s*([0-9]{0,3})\)/" ;
$re = preg_match( $regexp , $rgb , $match );
$re = array_shift ( $match );
$hexColor = "#" ;
$hex = array ( '0' , '1' , '2' , '3' , '4' , '5' , '6' , '7' , '8' , '9' , 'A' , 'B' , 'C' , 'D' , 'E' , 'F' );
for ( $i = 0; $i < 3; $i ++) {
$r = null;
$c = $match [ $i ];
$hexAr = array ();
while ( $c > 16) {
$r = $c % 16;
$c = ( $c / 16) >> 0;
array_push ( $hexAr , $hex [ $r ]);
}
array_push ( $hexAr , $hex [ $c ]);
$ret = array_reverse ( $hexAr );
$item = implode( '' , $ret );
$item = str_pad ( $item , 2, '0' , STR_PAD_LEFT);
$hexColor .= $item ;
}
return $hexColor ;
}
/**
* 十六进制 转 RGB
*/
function hex2rgb( $hexColor ) {
$color = str_replace ( '#' , '' , $hexColor );
if ( strlen ( $color ) > 3) {
$rgb = array (
'r' => hexdec( substr ( $color , 0, 2)),
'g' => hexdec( substr ( $color , 2, 2)),
'b' => hexdec( substr ( $color , 4, 2))
);
} else {
$color = $hexColor ;
$r = substr ( $color , 0, 1) . substr ( $color , 0, 1);
$g = substr ( $color , 1, 1) . substr ( $color , 1, 1);
$b = substr ( $color , 2, 1) . substr ( $color , 2, 1);
$rgb = array (
'r' => hexdec( $r ),
'g' => hexdec( $g ),
'b' => hexdec( $b )
);
}
return $rgb ;
}
|
ps:推荐一款服务器之家在线工具
RGB颜色对照表:https://tool.zzvips.com/t/rgbhex/
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对服务器之家的支持。如果你想了解更多相关内容请查看下面相关链接
原文链接:http://www.codetc.com/article-265-1.html