2012-02-08 2 views
6

나는 데이터베이스에서 오는 ID를 가지고 있으므로 (그래서 1, 100, 1000, ...이 될 수 있음) 나는 동등한 ID가 결과를 가져야하지만 임의의 색상을 생성해야합니다. 같은 색으로.PHP는 RGB를 생성

내가 어떻게이 목표를 달성 할 수 있을지에 대한 제안이 있으십니까?

감사합니다.

+0

지금까지 작성된 코드 (또는 의사 코드)가 있습니까? – summea

+0

비트 분할은 어떨까요? Bit0-> R의 Bit7, G의 Bit1-> Bit7, B의 Bit2-> Bit7, R의 Bit3> Bit6 ... 이것은 복잡한 반면, ID 공간이없는 한 매우 다른 색상을 제공합니다. 너무 큰. –

답변

25

필요하지 않은 암호 해시를 사용하고 바이트 클립 :

function getColor($num) { 
    $hash = md5('color' . $num); // modify 'color' to get a different palette 
    return array(
     hexdec(substr($hash, 0, 2)), // r 
     hexdec(substr($hash, 2, 2)), // g 
     hexdec(substr($hash, 4, 2))); //b 
} 

결과 (code to generate it) 숫자 0-20에 대해 다음과 같습니다

demo output

1

분명한 방법은 ID를 색상으로 변환하는 것입니다 (예 : 하위 8 비트는 파란색, 다음 8 비트는 녹색, 다음 8은 빨간색입니다. 8 비트는 그대로 두십시오). ;-)

당신이 끔찍한 컬러 팔레트와 끝까지 왜냐하면이 (작동하지 않는 가정 :. 색상에 ID의 매핑을 할 를 사용하여 배열 (또는 해시 테이블)

당신이 염려되는 경우 ID가 너무 많으면 ID에 해시를 적용하고 "id to color"매핑을 입력 할 때 사용할 수 있습니다.이 경우에는 id가 항상 하나의 색상을 갖지만 하나의 색상은 많은 ID에서 사용됩니다.

1
<?php 
// someting like this? 
$randomString = md5($your_id_here); // like "d73a6ef90dc6a ..." 
$r = substr($randomString,0,2); //1. and 2. 
$g = substr($randomString,2,2); //3. and 4. 
$b = substr($randomString,4,2); //5. and 6. 
?> 
<style> 
#topbar { border-bottom:4px solid #<?php echo $r.$g.$b; ?>; } 
</style> 
0

배열이 항상 정렬되는 경우이 항목을 최대 250 개의 항목까지 사용할 수 있습니다.

<?php 
function getRGBColorString($array) 
{ 
    $indexColor = round(250/count($array)); 
    $iterator = 1; 

    $arrayOfRGB = array(); 

    foreach($array as $item) 
    { 
     $arrayOfRGB[] = "rgb(" . ($indexColor * $iterator) . ", 113, 113)"; 
     $iterator++; 
    } 

    return $arrayOfRGB; 
} 

?>