在我的代码中
$color = rgb(255, 255, 255);
我想把这个转换成十六进制颜色代码。输出像
$color = '#ffffff';
eoxn13cs1#
简单的sprintf就可以了。
sprintf
$color = sprintf("#%02x%02x%02x", 13, 0, 255); // #0d00ff
要分解格式:
#
%
0
2
x
%02x%02x
0s7z1bwu2#
您可以使用以下函数
function fromRGB($R, $G, $B) { $R = dechex($R); if (strlen($R)<2) $R = '0'.$R; $G = dechex($G); if (strlen($G)<2) $G = '0'.$G; $B = dechex($B); if (strlen($B)<2) $B = '0'.$B; return '#' . $R . $G . $B; }
然后,echo fromRGB(115,25,190);将打印**#7319be**来源:RGB to hex colors and hex colors to RGB - PHP
echo fromRGB(115,25,190);
laawzig23#
你可以试试下面这段简单的代码,你也可以在代码中动态传递rgb代码。
$rgb = (123,222,132); $rgbarr = explode(",",$rgb,3); echo sprintf("#%02x%02x%02x", $rgbarr[0], $rgbarr[1], $rgbarr[2]);
这将返回类似于#7bde84的代码
fjaof16o4#
下面是一个函数,它将接受字符串版本的rgb或rgba,并返回hex颜色。
rgb
rgba
hex
function rgb_to_hex( string $rgba ) : string { if ( strpos( $rgba, '#' ) === 0 ) { return $rgba; } preg_match( '/^rgba?[\s+]?\([\s+]?(\d+)[\s+]?,[\s+]?(\d+)[\s+]?,[\s+]?(\d+)[\s+]?/i', $rgba, $by_color ); return sprintf( '#%02x%02x%02x', $by_color[1], $by_color[2], $by_color[3] ); }
示例:rgb_to_hex( 'rgba(203, 86, 153, 0.8)' );//返回#cb5699
rgb_to_hex( 'rgba(203, 86, 153, 0.8)' );
#cb5699
rfbsl7qr5#
你可以试试这个
function rgb2html($r, $g=-1, $b=-1) { if (is_array($r) && sizeof($r) == 3) list($r, $g, $b) = $r; $r = intval($r); $g = intval($g); $b = intval($b); $r = dechex($r<0?0:($r>255?255:$r)); $g = dechex($g<0?0:($g>255?255:$g)); $b = dechex($b<0?0:($b>255?255:$b)); $color = (strlen($r) < 2?'0':'').$r; $color .= (strlen($g) < 2?'0':'').$g; $color .= (strlen($b) < 2?'0':'').$b; return '#'.$color; }
5ktev3wc6#
如果你想使用外部解决方案,spatie有一个包可以完全满足你的需要:https://github.com/spatie/color
spatie
$rgb = Rgb::fromString('rgb(55,155,255)'); echo $rgb->red(); // 55 echo $rgb->green(); // 155 echo $rgb->blue(); // 255 echo $rgb; // rgb(55,155,255) $rgba = $rgb->toRgba(); // `Spatie\Color\Rgba` $rgba->alpha(); // 1 echo $rgba; // rgba(55,155,255,1) $hex = $rgb->toHex(); // `Spatie\Color\Hex` echo $hex; // #379bff $hsl = $rgb->toHsl(); echo $hsl; // hsl(210,100%,100%)
qf9go6mv7#
基于Mat Lipe中的函数,这将更改字符串中rgb颜色的所有示例:
$html = preg_replace_callback("/rgba?[\s+]?\([\s+]?(\d+)[\s+]?,[\s+]?(\d+)[\s+]?,[\s+]?(\d+)[\s+]?,?[\s+]?\d+?[\s+]?\)/i", function($matches) { return strtoupper(sprintf("#%02x%02x%02x", $matches[1], $matches[2], $matches[3])); }, $html);
如果您喜欢小写十六进制,可以删除strtoupper。
strtoupper
7条答案
按热度按时间eoxn13cs1#
简单的
sprintf
就可以了。要分解格式:
#
-原义字符#%
-转换规范开始0
-用于填充的字符2
-转换应产生的最小字符数,必要时用上述字符填充x
-参数被视为整数,并以小写字母的十六进制数表示%02x%02x
-以上四个重复两次以上0s7z1bwu2#
您可以使用以下函数
然后,
echo fromRGB(115,25,190);
将打印**#7319be**来源:RGB to hex colors and hex colors to RGB - PHP
laawzig23#
你可以试试下面这段简单的代码,你也可以在代码中动态传递rgb代码。
这将返回类似于#7bde84的代码
fjaof16o4#
下面是一个函数,它将接受字符串版本的
rgb
或rgba
,并返回hex
颜色。示例:
rgb_to_hex( 'rgba(203, 86, 153, 0.8)' );
//返回#cb5699
rfbsl7qr5#
你可以试试这个
5ktev3wc6#
如果你想使用外部解决方案,
spatie
有一个包可以完全满足你的需要:https://github.com/spatie/color
qf9go6mv7#
基于Mat Lipe中的函数,这将更改字符串中rgb颜色的所有示例:
如果您喜欢小写十六进制,可以删除
strtoupper
。