2012-02-08 16 views
6

उत्पन्न करता है मुझे इस स्थिति का सामना करना पड़ रहा है जहां मेरे पास एक आईडी है जो डेटाबेस से आता है (इसलिए यह 1, 100, 1000, ... हो सकता है) और मुझे यादृच्छिक रंग उत्पन्न करने की आवश्यकता है, हालांकि बराबर आईडी का परिणाम होना चाहिए एक ही रंग मेंPHP आरजीबी

कोई सुझाव है कि मैं इसे कैसे प्राप्त कर सकता हूं?

धन्यवाद!

+0

क्या आपके पास अब तक कोई कोड (या छद्म कोड) लिखा गया है? – summea

+0

बिट-विभाजन के बारे में क्या? बिट 0-> आर का बिट 7, बिट 1-> जी का बिट 7, बिट 2-> बी का बिट 7, बिट 3-> आर का बिट 6, ... जबकि यह जटिल है, यह बहुत अलग रंग देता है, जब तक कि आईडी स्पेस न हो बहुत बड़ा। –

उत्तर

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

स्पष्ट दृष्टिकोण आईडी को केवल एक रंग में परिवर्तित करना है (उदाहरण के लिए निचले 8 बिट नीले हैं, अगले 8 बिट ग्रीन हैं, अगले 8 लाल हैं - 8 बिट्स छोड़ दें, लेकिन मुझे यकीन है कि आप इसे समझ सकते हैं ;-)

मान लिया जाये कि यह (काम नहीं करता है क्योंकि आप एक भयानक रंग पैलेट के साथ अंत:। एक सरणी (या हैश तालिका) उपयोग रंग करने के लिए आईडी की एक मानचित्रण बनाने के लिए

आप चिंतित हैं, तो कि बहुत सी आईडी हैं, तो आप आईडी में कुछ हैश लागू कर सकते हैं और जब आप "आईडी टू कलर" मैपिंग में कुंजी डालते हैं, तो इस मामले में आप प्रभावी ढंग से कह रहे हैं कि एक आईडी में हमेशा एक रंग होता है, लेकिन एक रंग हो सकता है कई आईडी द्वारा उपयोग किया जाता है।

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; 
} 

?> 
संबंधित मुद्दे