PHP 不透明度乘法

PHP Opacity multiplication

所以我有一个像这样的字符串 "rgba(66, 66, 66, 1)" 我怎样才能将它的最后一位或数字乘以 255。它还需要符合 rgba(214, 234, 216, 0.6)例子。我不确定如何做到这一点,因为 rgb 方面和不透明度每次都可能不同。

简单地使用爆炸,将它在 ',' 上拆分成一个数组:

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

您可能会对第 4 个项目($arr[3])进行 floatval 处理:

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

然后使用 implode() 函数将其加入备份(记得在 ')' 上添加,我们的 floatval 将丢失:

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

应该可以。

这是一个工作函数,它解析 rgba 格式和 returns 具有每种颜色的数组,以及将浮点 alpha 值缩放到 0-255。它还将所有值限制在 0-255 之间,以防止超出该范围的溢出。如果传入无效的 rgb 字符串,函数 returns false.

函数(demo):

/**
 * 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
)