rgba — умножение непрозрачности PHP

Итак, у меня есть строка типа «rgba (66, 66, 66, 1)», как я могу умножить последнюю цифру или число на 255. Она также должна соответствовать rgba (214, 234, 216, 0,6 ) например. Я не был уверен, как это сделать, так как аспект RGB и непрозрачность могут отличаться каждый раз.

0

Решение

Вот рабочая функция, которая анализирует формат rgba и возвращает массив с каждым цветом вместе с масштабированием значения с плавающей запятой до 0-255. Он также фиксирует все значения в диапазоне 0-255, чтобы предотвратить переполнение за пределами этого диапазона. Если передана неверная строка rgb, функция возвращает false.

Функция (демонстрация):

/**
* Parses an RGBA string and returns and array with each color
* @param  string $str The RGBA string, ex: "rgba(66, 66, 66, 1)"* @return array       Returns an array with each r, g, b and a value or false if an invalid string is passed in.
*/
function parseRGBA($str){
//match the rgba string and get it's part
if(preg_match('/rgba\( *([\d\.-]+), *([\d\.-]+), *([\d\.-]+), *([\d\.-]+) *\)/i', $str, $m)){
$out = array(
'r'=>intval($m[1]), //get the red
'g'=>intval($m[2]), //get the green
'b'=>intval($m[3]), //get the blue
'a'=>round(floatval($m[4]) * 255), //get the alpha and scale to 0-255
);

//clamp each  value between 0 and 255
array_walk($out, function(&$v){ $v = min(255, max(0, $v)); });

return $out;
}
return false;
}

Пример:

echo '<pre>';
echo "Normal value: ";
print_r(parseRGBA("rgba(66, 66, 66, 1)"));

echo "Red > 255: ";
print_r(parseRGBA("rgba(660, 66, 66, 1)"));

echo "Green < 0: ";
print_r(parseRGBA("rgba(66, -66, 66, 1)"));

echo "Alpha float (normal): ";
print_r(parseRGBA("rgba(66, 66, 66, 0.6)"));

echo "Alpha overflow: ";
print_r(parseRGBA("rgba(66, 66, 66, 10)"));

выходы:

Normal value: Array
(
[r] => 66
[g] => 66
[b] => 66
[a] => 255
)
Red > 255: Array
(
[r] => 255
[g] => 66
[b] => 66
[a] => 255
)
Green < 0: Array
(
[r] => 66
[g] => 0
[b] => 66
[a] => 255
)
Alpha float (normal): Array
(
[r] => 66
[g] => 66
[b] => 66
[a] => 153
)
Alpha overflow: Array
(
[r] => 66
[g] => 66
[b] => 66
[a] => 255
)
1

Другие решения

просто используйте разнесение, разбив его на ‘,’ на массив:

$arr=explode(',',$string);

Вероятно, вам сойдет с рук выполнение floatval для 4-го элемента ($ arr [3]):

$arr[3]=255*floatval($arr[3]);

затем присоедините его обратно с помощью функции implode () (не забывая добавить обратно в ‘)’, наш floatval потеряет:

$string=implode(',',$arr).")";

Должно сработать.

0

По вопросам рекламы [email protected]