我想在 PHP 中在 RGBA 格式的 HEX 颜色(如0xFF0000FF
)和 RGB 格式的 HEX 颜色(如 )之间来回转换。0xFF0000
我怎样才能做到这一点?
这两个功能将满足您的需求:
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;
}
第一个中的 $blend 实际上是要与之混合的背景颜色。
编辑:修复由于 ints 中没有足够的空间破坏 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);
}
RGBA -> RGB 应该很简单,因为它只是切断了最后两位数字。另一个方向是不可能的,因为 alpha 信息不是以 RGB 编码的。
正如弗兰克所说,您可以简单地去除最后 2 位数字。
十六进制格式是 3 对数字,第一对红色值,接下来是绿色,接下来是蓝色。如果添加另一对,则假定为 alpha 值。