PHP를 사용하여 16 진수 색상 값을 #ffffff
단일 RGB 값으로 변환하는 좋은 방법은 무엇입니까 255 255 255
?
답변
PHP hexdec()
와 dechex()
기능 확인 :
http://php.net/manual/en/function.hexdec.php
예:
$value = hexdec('ff'); // $value = 255
답변
16 진수를 rgb로 변환하려면 sscanf 를 사용할 수 있습니다 .
<?php
$hex = "#ff9900";
list($r, $g, $b) = sscanf($hex, "#%02x%02x%02x");
echo "$hex -> $r $g $b";
?>
산출:
#ff9900 -> 255 153 0
답변
알파가 두 번째 매개 변수로 제공되면 알파를 반환하는 함수를 만들었습니다.
함수
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) . ')';
답변
관심이있는 사람에게 이것은 매우 간단한 방법입니다. 이 예에서는 정확히 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)
);
답변
함수 hexdec(hexStr: String)
를 사용하여 16 진 문자열의 10 진수 값을 가져올 수 있습니다 .
예는 아래를 참조하십시오.
$split = str_split("ffffff", 2);
$r = hexdec($split[0]);
$g = hexdec($split[1]);
$b = hexdec($split[2]);
echo "rgb(" . $r . ", " . $g . ", " . $b . ")";
이것은 인쇄됩니다 rgb(255, 255, 255)
답변
해시, 단일 값 또는 쌍 값을 사용하거나 사용하지 않고 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' ) );
답변
아래에서이 간단한 코드를 시도해 볼 수 있습니다.
list($r, $g, $b) = sscanf(#7bde84, "#%02x%02x%02x");
echo $r . "," . $g . "," . $b;
그러면 123,222,132가 반환됩니다.