103

PHP を使用して 16 進数の色の値#ffffffを単一の RGB 値に変換するにはどうすればよいでしょうか?255 255 255

4

17 に答える 17

330

16 進数を RGB に変換する場合は、 sscanfを使用できます。

<?php
$hex = "#ff9900";
list($r, $g, $b) = sscanf($hex, "#%02x%02x%02x");
echo "$hex -> $r $g $b";
?>

出力:

#ff9900 -> 255 153 0
于 2013-03-04T12:56:43.367 に答える
60

hexdec()PHPとdechex()関数 をチェックしてください: http://php.net/manual/en/function.hexdec.php

例:

$value = hexdec('ff'); // $value = 255
于 2013-03-04T12:58:25.157 に答える
47

コードが以下の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) . ')';

于 2015-08-11T06:05:56.430 に答える
43

興味のある人にとっては、これはもう 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)
);
于 2013-06-14T19:00:05.437 に答える
6

以下の簡単なコードを試すことができます。

list($r, $g, $b) = sscanf(#7bde84, "#%02x%02x%02x");
echo $r . "," . $g . "," . $b;

これは 123,222,132 を返します

于 2016-11-24T02:54:57.843 に答える
5

ハッシュ、単一値、またはペア値の有無にかかわらず、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' ) );
于 2016-09-21T22:44:04.513 に答える
4

カラーコード 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

于 2015-08-24T05:32:51.603 に答える
4

@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)
  ];
}
于 2015-05-22T07:59:07.933 に答える
0

これを試してみてください。引数 (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);
}
?>
于 2013-03-04T13:01:33.217 に答える
0
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)";
    }
于 2020-03-21T01:08:41.110 に答える
0
//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]);
于 2017-06-02T11:05:57.293 に答える