如何将 RGBA 颜色代码转换为 PHP 中的 8 位十六进制?
How to convert RGBA color codes to 8 Digit Hex in PHP?
我正在尝试转换一些 rgba values into a format suitable for SubStation Alpha subtitle files。 .ass
文件格式需要像 &H12345690
这样的颜色格式,其中十六进制字节按蓝色、绿色、红色、字母顺序排列。
我正在寻找将 8 位十六进制颜色转换为 RGBA 的示例,但不是相反。这是我根据其中一个答案放在一起的函数,但我的 alpha 通道始终返回为零:
function rgbtohex($string) {
$string = str_replace("rgba","",$string);
$string = str_replace("rgb","",$string);
$string = str_replace("(","",$string);
$string = str_replace(")","",$string);
$colorexplode = explode(",",$string);
$hex = '&H';
foreach($colorexplode AS $c) {
echo "C" . $c . " " . dechex($c) . "<br><br>";
$hex .= dechex($c);
}
return $hex;
}
但是,如果我用 rgba(123,223,215,.9)
测试它,它会生成 &H7bdfd70
,它只有 7 个字符,而不是 8 个。
此外,alpha 通道 (.9) 始终为零,因此似乎无法正常工作。
您可以使用 dechex() 函数将 rgba 颜色的每个参数转换为 2 个十六进制数字。
因此在您的示例中,您必须连接 rgba 的每个部分以获得颜色的十六进制值:
dechex(123).dechex(100).dechex(23).dechex(0.5)
您可以使用 printf()
函数族来转换为适当填充的十六进制字符串。小数不能用十六进制表示,所以该值取为0xFF的分数。
$rgba = "rgba(123,100,23,.5)";
// get the values
preg_match_all("/([\d.]+)/", $rgba, $matches);
// output
$hex = sprintf(
"&H%02X%02X%02X%02X",
$matches[1][2], // blue
$matches[1][1], // green
$matches[1][0], // red
$matches[1][3] * 255, // adjusted opacity
);
echo $hex;
输出:
&H17647B7F
我正在尝试转换一些 rgba values into a format suitable for SubStation Alpha subtitle files。 .ass
文件格式需要像 &H12345690
这样的颜色格式,其中十六进制字节按蓝色、绿色、红色、字母顺序排列。
我正在寻找将 8 位十六进制颜色转换为 RGBA 的示例,但不是相反。这是我根据其中一个答案放在一起的函数,但我的 alpha 通道始终返回为零:
function rgbtohex($string) {
$string = str_replace("rgba","",$string);
$string = str_replace("rgb","",$string);
$string = str_replace("(","",$string);
$string = str_replace(")","",$string);
$colorexplode = explode(",",$string);
$hex = '&H';
foreach($colorexplode AS $c) {
echo "C" . $c . " " . dechex($c) . "<br><br>";
$hex .= dechex($c);
}
return $hex;
}
但是,如果我用 rgba(123,223,215,.9)
测试它,它会生成 &H7bdfd70
,它只有 7 个字符,而不是 8 个。
此外,alpha 通道 (.9) 始终为零,因此似乎无法正常工作。
您可以使用 dechex() 函数将 rgba 颜色的每个参数转换为 2 个十六进制数字。
因此在您的示例中,您必须连接 rgba 的每个部分以获得颜色的十六进制值:
dechex(123).dechex(100).dechex(23).dechex(0.5)
您可以使用 printf()
函数族来转换为适当填充的十六进制字符串。小数不能用十六进制表示,所以该值取为0xFF的分数。
$rgba = "rgba(123,100,23,.5)";
// get the values
preg_match_all("/([\d.]+)/", $rgba, $matches);
// output
$hex = sprintf(
"&H%02X%02X%02X%02X",
$matches[1][2], // blue
$matches[1][1], // green
$matches[1][0], // red
$matches[1][3] * 255, // adjusted opacity
);
echo $hex;
输出:
&H17647B7F