Итак, у меня есть строка типа «rgba (66, 66, 66, 1)», как я могу умножить последнюю цифру или число на 255. Она также должна соответствовать rgba (214, 234, 216, 0,6 ) например. Я не был уверен, как это сделать, так как аспект RGB и непрозрачность могут отличаться каждый раз.
Вот рабочая функция, которая анализирует формат 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
)
просто используйте разнесение, разбив его на ‘,’ на массив:
$arr=explode(',',$string);
Вероятно, вам сойдет с рук выполнение floatval для 4-го элемента ($ arr [3]):
$arr[3]=255*floatval($arr[3]);
затем присоедините его обратно с помощью функции implode () (не забывая добавить обратно в ‘)’, наш floatval потеряет:
$string=implode(',',$arr).")";
Должно сработать.