RGBA в формате HEX в RGB в формате HEX?PHP - PullRequest
0 голосов
/ 13 июля 2011

Я хочу конвертировать туда и обратно между HEX-цветами, форматированными в RGBA (например, 0xFF0000FF), и HEX-цветами, форматированными в RGB (например, 0xFF0000), в PHP.

Как я могу это сделать?

Ответы [ 4 ]

2 голосов
/ 13 июля 2011

Эти две функции будут делать то, что вам нужно:

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

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

Первая просто удаляет последние два символа, а вторая просто добавляет FF.

1 голос
/ 27 июля 2012

Как насчет этих:

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);
}
0 голосов
/ 13 июля 2011

Как уже упоминал Фрэнк, вы можете просто удалить последние 2 цифры.

Шестнадцатеричный формат - это 3 пары чисел, первая пара - значение красного цвета, следующая - зеленая, а следующая - синяя. Если вы добавите другую пару, предполагается, что это альфа-значение.

0 голосов
/ 13 июля 2011

RGBA -> RGB должен быть простым, поскольку он просто отрезает последние две цифры. Другое направление невозможно, поскольку альфа-информация не кодируется в RGB.

...