PHP を使用して 16 進数の色の値#ffffff
を単一の RGB 値に変換するにはどうすればよいでしょうか?255 255 255
17 に答える
16 進数を RGB に変換する場合は、 sscanfを使用できます。
<?php
$hex = "#ff9900";
list($r, $g, $b) = sscanf($hex, "#%02x%02x%02x");
echo "$hex -> $r $g $b";
?>
出力:
#ff9900 -> 255 153 0
hexdec()
PHPとdechex()
関数
をチェックしてください: http://php.net/manual/en/function.hexdec.php
例:
$value = hexdec('ff'); // $value = 255
コードが以下の2番目のパラメーターとしてアルファが提供されている場合、アルファも返す関数を作成しました。
関数
function hexToRgb($hex, $alpha = false) {
$hex = str_replace('#', '', $hex);
$length = strlen($hex);
$rgb['r'] = hexdec($length == 6 ? substr($hex, 0, 2) : ($length == 3 ? str_repeat(substr($hex, 0, 1), 2) : 0));
$rgb['g'] = hexdec($length == 6 ? substr($hex, 2, 2) : ($length == 3 ? str_repeat(substr($hex, 1, 1), 2) : 0));
$rgb['b'] = hexdec($length == 6 ? substr($hex, 4, 2) : ($length == 3 ? str_repeat(substr($hex, 2, 1), 2) : 0));
if ( $alpha ) {
$rgb['a'] = $alpha;
}
return $rgb;
}
関数応答の例
print_r(hexToRgb('#19b698'));
Array (
[r] => 25
[g] => 182
[b] => 152
)
print_r(hexToRgb('19b698'));
Array (
[r] => 25
[g] => 182
[b] => 152
)
print_r(hexToRgb('#19b698', 1));
Array (
[r] => 25
[g] => 182
[b] => 152
[a] => 1
)
print_r(hexToRgb('#fff'));
Array (
[r] => 255
[g] => 255
[b] => 255
)
rgb(a) を CSS 形式で返したい場合return $rgb;
は、関数内の行を次のように置き換えます。return implode(array_keys($rgb)) . '(' . implode(', ', $rgb) . ')';
興味のある人にとっては、これはもう 1 つの非常に簡単な方法です。この例では、ちょうど 6 文字があり、先頭にポンド記号がないことを前提としています。
list($r, $g, $b) = array_map('hexdec', str_split($colorName, 2));
4 つの異なる入力 (abc、aabbcc、#abc、#aabbcc) をサポートする例を次に示します。
list($r, $g, $b) = array_map(
function ($c) {
return hexdec(str_pad($c, 2, $c));
},
str_split(ltrim($colorName, '#'), strlen($colorName) > 4 ? 2 : 1)
);
以下の簡単なコードを試すことができます。
list($r, $g, $b) = sscanf(#7bde84, "#%02x%02x%02x");
echo $r . "," . $g . "," . $b;
これは 123,222,132 を返します
ハッシュ、単一値、またはペア値の有無にかかわらず、16 進数の色を処理するための私のアプローチ:
function hex2rgb ( $hex_color ) {
$values = str_replace( '#', '', $hex_color );
switch ( strlen( $values ) ) {
case 3;
list( $r, $g, $b ) = sscanf( $values, "%1s%1s%1s" );
return [ hexdec( "$r$r" ), hexdec( "$g$g" ), hexdec( "$b$b" ) ];
case 6;
return array_map( 'hexdec', sscanf( $values, "%2s%2s%2s" ) );
default:
return false;
}
}
// returns array(255,68,204)
var_dump( hex2rgb( '#ff44cc' ) );
var_dump( hex2rgb( 'ff44cc' ) );
var_dump( hex2rgb( '#f4c' ) );
var_dump( hex2rgb( 'f4c' ) );
// returns false
var_dump( hex2rgb( '#f4' ) );
var_dump( hex2rgb( 'f489' ) );
カラーコード HEX を RGB に変換
$color = '#ffffff';
$hex = str_replace('#','', $color);
if(strlen($hex) == 3):
$rgbArray['r'] = hexdec(substr($hex,0,1).substr($hex,0,1));
$rgbArray['g'] = hexdec(substr($hex,1,1).substr($hex,1,1));
$rgbArray['b'] = hexdec(substr($hex,2,1).substr($hex,2,1));
else:
$rgbArray['r'] = hexdec(substr($hex,0,2));
$rgbArray['g'] = hexdec(substr($hex,2,2));
$rgbArray['b'] = hexdec(substr($hex,4,2));
endif;
print_r($rgbArray);
出力
Array ( [r] => 255 [g] => 255 [b] => 255 )
ここからこのリファレンスを見つけました - Convert Color Hex to RGB and RGB to Hex using PHP
@John の回答と @iic のコメント/アイデアを、通常の 16 進カラー コードと省略形カラー コードの両方を処理できる関数にまとめました。
簡単な説明:
scanfを使用して、16 進数の色から r、g、b の値を文字列として読み取りました。@Johnの回答のように16進値ではありません。省略形のカラー コードを使用する場合、r、g、および b の文字列は、10 進数に変換する前に 2 倍にする必要があります ("f" -> "ff" など)。
function hex2rgb($hexColor)
{
$shorthand = (strlen($hexColor) == 4);
list($r, $g, $b) = $shorthand? sscanf($hexColor, "#%1s%1s%1s") : sscanf($hexColor, "#%2s%2s%2s");
return [
"r" => hexdec($shorthand? "$r$r" : $r),
"g" => hexdec($shorthand? "$g$g" : $g),
"b" => hexdec($shorthand? "$b$b" : $b)
];
}
これを試してみてください。引数 (r、g、b) を 16 進数の html-color 文字列に変換します #RRGGBB 引数は整数に変換され、0..255 の範囲にトリミングされます
<?php
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;
}
?>
ああ、逆に
先頭の # 文字は省略できます。関数は、範囲 (0..255) の 3 つの整数の配列を返すか、色形式の認識に失敗した場合は false を返します。
<?php
function html2rgb($color)
{
if ($color[0] == '#')
$color = substr($color, 1);
if (strlen($color) == 6)
list($r, $g, $b) = array($color[0].$color[1],
$color[2].$color[3],
$color[4].$color[5]);
elseif (strlen($color) == 3)
list($r, $g, $b) = array($color[0].$color[0], $color[1].$color[1], $color[2].$color[2]);
else
return false;
$r = hexdec($r); $g = hexdec($g); $b = hexdec($b);
return array($r, $g, $b);
}
?>
Enjoy
public static function hexColorToRgba($hex, float $a){
if($a < 0.0 || $a > 1.0){
$a = 1.0;
}
for ($i = 1; $i <= 5; $i = $i+2){
$rgb[] = hexdec(substr($hex,$i,2));
}
return"rgba({$rgb[0]},{$rgb[1]},{$rgb[2]},$a)";
}
//if u want to convert rgb to hex
$color='254,125,1';
$rgbarr=explode(",", $color);
echo sprintf("#%02x%02x%02x", $rgbarr[0], $rgbarr[1], $rgbarr[2]);