PHP实现十六进制颜色值(hex)转RGB数组方法
在网页开发或图像处理中,经常需要将十六进制颜色代码(Hex)转换为RGB格式以便进行程序化渲染或数据计算。本文将分享一段精简的 PHP 代码,用于将 Hex 颜色值解析为包含 red、green、blue 键值的关联数组,同时兼容短格式(3位)和长格式(6位)颜色代码。
实现原理
核心逻辑主要依赖 PHP 内置的 substr 截取字符与 hexdec 十六进制转十进制函数。步骤如下:
- 预处理:移除颜色值开头的
#符号。 - 长度判断:根据剩余字符串长度区分3位简写格式(如
F0A)和6位标准格式(如FF00AA)。 - 拆分与扩展:
- 6位格式:直接按每两位切分为红、绿、蓝分量。
- 3位格式:对每个字符复制自身(如
A变为AA),以匹配6位逻辑。
- 转换:使用
hexdec()将十六进制字符串转为十进制整数(0-255范围)。 - 封装:将结果打包为关联数组返回。
代码实现
以下函数 hex2rgb 接收一个颜色字符串作为参数,若无法识别格式则返回 false。
function hex2rgb( $colour ) {
// 1. 去除可能存在的 '#' 前缀
if ( $colour[0] == '#' ) {
$colour = substr( $colour, 1 );
}
// 2. 根据长度拆分 RGB 分量
if ( strlen( $colour ) == 6 ) {
// 6位格式:例如 #FFFFFF -> 'FF', 'FF', 'FF'
list( $r, $g, $b ) = array(
$colour[0] . $colour[1],
$colour[2] . $colour[3],
$colour[4] . $colour[5]
);
} elseif ( strlen( $colour ) == 3 ) {
// 3位格式:例如 #FFF -> 'FF', 'FF', 'FF'
list( $r, $g, $b ) = array(
$colour[0] . $colour[0],
$colour[1] . $colour[1],
$colour[2] . $colour[2]
);
} else {
// 不支持其他长度的格式
return false;
}
// 3. 十六进制转十进制
$r = hexdec( $r );
$g = hexdec( $g );
$b = hexdec( $b );
// 4. 返回关联数组
return array( 'red' => $r, 'green' => $g, 'blue' => $b );
}
测试与运行结果
使用 var_dump() 调用上述函数,输入浅灰色代码 #eeeeee,验证转换是否正确:
// 测试代码
var_dump(hex2rgb("#eeeeee"));
控制台输出结果如下,确认各通道数值均为 238(十六进制 EE):
array(3) {
["red"]=>
int(238)
["green"]=>
int(238)
["blue"]=>
int(238)
}
注意事项
- 安全性:该函数未对输入非字符串类型做强制类型转换,建议确保传入值为合法颜色字符串。
- 透明度:此版本仅处理 RGB 三通道,不包含 Alpha 通道(如 RGBA 或 8位 Hex)。如需处理透明度,需额外扩展逻辑。
- 兼容性:使用了较为基础的 PHP 语法,兼容绝大多数 PHP 版本环境。
以上就是PHP实现将颜色hex值转换成rgb的详细内容,更多关于PHP颜色处理的技巧请持续关注相关技术文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













