Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
RGBA格式十六进制转换为RGB格式十六进制?PHP_Php_Hex_Rgb_Rgba - Fatal编程技术网

RGBA格式十六进制转换为RGB格式十六进制?PHP

RGBA格式十六进制转换为RGB格式十六进制?PHP,php,hex,rgb,rgba,Php,Hex,Rgb,Rgba,我想在PHP中在RGBA格式的十六进制颜色(如0xFF0000FF)和RGB格式的十六进制颜色(如0xFF0000)之间来回转换 我怎样才能做到这一点?RGBA->RGB应该很简单,因为它只是切断了最后两个数字。另一个方向是不可能的,因为alpha信息不是用RGB编码的。正如Frank提到的,您可以简单地去掉最后2个数字 十六进制格式为3对数字,第一对为红色,第二对为绿色,第二对为蓝色。如果添加另一对,则假定为alpha值。这两个函数将满足您的需要: function rgbaToRgb ($r

我想在PHP中在RGBA格式的十六进制颜色(如
0xFF0000FF
)和RGB格式的十六进制颜色(如
0xFF0000
)之间来回转换


我怎样才能做到这一点?

RGBA->RGB应该很简单,因为它只是切断了最后两个数字。另一个方向是不可能的,因为alpha信息不是用RGB编码的。

正如Frank提到的,您可以简单地去掉最后2个数字


十六进制格式为3对数字,第一对为红色,第二对为绿色,第二对为蓝色。如果添加另一对,则假定为alpha值。

这两个函数将满足您的需要:

function rgbaToRgb ($rgba) {
    return substr($rgba, 0, -2);
}

function rgbToRgba ($rgb) {
    return $rgb . "FF";
}
第一个简单地删除最后两个字符,而第二个简单地添加
FF

这些字符如何:

function rgbaToRgb ($rgba, $blend = 0xFFFFFF) {
    return (($rgba >> 8)*($rgba & 0xFF)/0xFF) * ($blend / 0xFFFFFF);
}

function rgbToRgba ($rgb) {
    return ($rgb << 8) | 0xFF;
}
函数rgbaToRgb($rgba,$blend=0xFFFFFF){ 返回(($rgba>>8)*($rgba&0xFF)/0xFF)*($blend/0xFFFF); } 函数rgbToRgba($rgb){ 返回($rgb>16)*(0xFF-$rgba[3])/0xFF,$rgba[1]*$rgba[3]/0xFF+($blend>>8)&0xFF)*(0xFF-$rgba[3])/0xFF,$rgba[2]*$rgba[3]/0xFF+($blend&0xFF)*(0xFF-$rgba[3])/0xFF); 返回($rbg[0]8)和0xFF,$rgb和0xFF,0xFF); }
应该非常简单,只需从RGBA字符串中去掉最后两个字符,然后在RGB字符串中添加“FF”。您当前存储的值是如何存储的?作为ints?e、 g.
$rgba=\xff000ff?相反,在结尾处添加“FF”。我正在寻找另一种解决方案,即字符串->剪切最后2个字符->hexI知道这两件事,但我正在寻找基于位的解决方案。正如我所说,我正在寻找另一种使用字符串的解决方案:)
function rgbaToRgb ($rgba, $blend = 0xFFFFFF) {
$rbg = array($rgba[0] * $rgba[3]/0xFF + ($blend>>16) * (0xFF-$rgba[3])/0xFF, $rgba[1] * $rgba[3]/0xFF + (($blend>>8)&0xFF)*(0xFF-$rgba[3])/0xFF, $rgba[2] * $rgba[3]/0xFF + ($blend&0xFF) * (0xFF-$rgba[3])/0xFF);
return ($rbg[0]<<16) + ($rbg[1]<<8) + $rbg[2];
}

function rgbToRgba ($rgb) {
    return array($rgb >> 16, ($rgb >> 8) & 0xFF, $rgb & 0xFF, 0xFF);
}