2011-07-12 100 views
0

我想在PHP中使用RGBA格式HEX颜色(如0xFF0000FF)和RGB格式HEX颜色(如0xFF0000)来回转换。RGBA格式HEX转换为RGB格式HEX? PHP

我该怎么做?

+2

应该像从RGBA字符串中剥离最后两个字符一样简单,并将'FF'附加到RGB字符串。 –

+0

你现在存储的值如何?作为整数?例如'$ rgba = \ xFF0000FF;'? –

回答

1

这些怎么样:第一

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

function rgbToRgba ($rgb) { 
    return ($rgb << 8) | 0xFF; 
} 

$融合是一个有效的背景颜色与融合。

编辑:修复由于没有足够的空间inint破坏RGBA。 RGBA现在作为四部分阵列处理。 RGB仍然是一个数字。:

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); 
} 
0

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

+0

好吧,反向会在最后加上“FF”。我正在寻找其他解决方案,字符串 - >剪切最后2个字符 - >十六进制 – Kacper

0

正如弗兰克所说,你可以简单地去掉最后两位数字。

十六进制格式是3对数字,第一对红色值,下一个是绿色,下一个是蓝色。如果你添加另一对,它被认为是alpha值。

+0

我知道这两件事,但我正在寻找基于位的解决方案。 – Kacper

2

这两个函数会做你需要的东西:

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

function rgbToRgba ($rgb) { 
    return $rgb . "FF"; 
} 

第一个只会删除最后两个字符,而第二个就追加FF

+0

正如我所说,我正在寻找其他解决方案,使用字符串:) – Kacper