在 PHP 中将 RGBA 转换为 HEX?

问题描述 投票:0回答:1

我想在 PHP 中将 RGBA 值转换为十六进制。我找到了 RGB 到十六进制的很好的帮助(例如 在 PHP 中将 RGB 转换为十六进制颜色值)。现在我也尝试改变A值。下面尝试一下。有人对我如何做得更好有任何建议吗?

public static function konvertiereRGBzuHEX(string $rgba): string
{

    if ( strpos( $rgba, '#' ) === 0 ) {
        return $rgba;
    }

    preg_match( '/^rgba?[\s+]?\([\s+]?(\d+)[\s+]?,[\s+]?(\d+)[\s+]?,[\s+]?(\d+)[\s+]?,[\s+]?(\d+)[\s+]?/i', $rgba, $by_color );
    
    if(isset($by_color[4])) 
    {
        $by_color[4] = 2 - $by_color[4];

        $by_color[1] = $by_color[1] * $by_color[4];
        $by_color[2] = $by_color[2] * $by_color[4];
        $by_color[3] = $by_color[3] * $by_color[4];
    }

    return sprintf( '#%02x%02x%02x', $by_color[1], $by_color[2], $by_color[3] );

}
php colors rgba
1个回答
0
投票

其实我不久前就完成了这个任务。

如果我们得到的颜色为

255,255,255,0.123

所以我们创建 reg 来检查
/(((25[0-5])|(2[0-4]\d)|(1?\d{0,2})|0), *){3}(0|(0\.\d{1,3})|1)$/

因此我们可以制作编码和解码功能

function encode(string $colorString)
{
    $colorArray = explode(',', $colorString);
    $colorArray[3] *= 255;
    $colorBytes = array_map(
        fn($part) =>  pack('C', (int)trim($part)),
        $colorArray
    );
    return implode($colorBytes);
}
function decode($hexColor)
{
    //$hexColor = stream_get_contents($hexColor); // If $hexColor is stream
    $colorArray = array_values(unpack('C*', $hexColor));
    return implode(
        ',',
        [$colorArray[0], $colorArray[1], $colorArray[2], round($colorArray[3]/255, 3)]
    );
}

我将我的颜色保存在数据库中。当我需要保存更多颜色时,我将其写入一个十六进制字符串,当我解码时,我将其分成 4 个字节的块

例如我有 ['255,123,125,1', '32,123,23,0.15']

$x = '';
foreach (['255,123,125,1', '32,123,23,0.15'] as $color) {
    $x .= $this->encode($color);
}
DB::insertColors($x);

试试这个,也许它会成为你的解决方案的目标

© www.soinside.com 2019 - 2024. All rights reserved.