我想在PHP中来回转换RGBA格式的HEX颜色(如0xFF0000FF
)和RGB格式的HEX颜色(如0xFF0000
)。
我该怎么做?
答案 0 :(得分:2)
这两个功能将满足您的需求:
function rgbaToRgb ($rgba) {
return substr($rgba, 0, -2);
}
function rgbToRgba ($rgb) {
return $rgb . "FF";
}
第一个只删除最后两个字符,而第二个只添加FF
。
答案 1 :(得分:1)
这些怎么样:
function rgbaToRgb ($rgba, $blend = 0xFFFFFF) {
return (($rgba >> 8)*($rgba & 0xFF)/0xFF) * ($blend / 0xFFFFFF);
}
function rgbToRgba ($rgb) {
return ($rgb << 8) | 0xFF;
}
第一个中的$ blend实际上是一种混合的背景颜色。
编辑:由于没有足够的空间破坏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);
}
答案 2 :(得分:0)
RGBA - &gt; RGB应该很简单,因为它只是切掉最后两位数字。另一个方向是不可能的,因为alpha信息不是用RGB编码的。
答案 3 :(得分:0)
正如弗兰克所说,你可以简单地删除最后两位数字。
十六进制格式是3对数字,第一对红色值,下一个是绿色,下一个是蓝色。如果添加另一对,则假定它是alpha值。