Я хочу конвертировать туда и обратно между RGBA-образованными цветами HEX (например, 0xFF0000FF
) и RGB-образованными цветами HEX (например, 0xFF0000
) в PHP.
Как я могу это сделать?
Как на счет этих:
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); }
Эти две функции будут делать то, что вам нужно:
function rgbaToRgb ($rgba) { return substr($rgba, 0, -2); } function rgbToRgba ($rgb) { return $rgb . "FF"; }
Первый просто удаляет последние два символа, а второй просто добавляет FF
.
RGBA -> RGB должен быть простым, так как он просто отключает последние две цифры. Другое направление невозможно, так как альфа-информация не кодируется в RGB.
Как отметил Фрэнк, вы можете просто удалить последние 2 цифры.
Шестнадцатеричный формат – 3 пары чисел, первая пара красного значения, следующая – Зеленая, а следующая – синяя. Если вы добавите еще одну пару, это считается альфа-значением.