簡體   English   中英

根據IP地址選擇顏色

[英]Choosing colours based on IP address

在我的PHP(v5.2.17)腳本中,我想根據當前用戶的IP地址為其輸入選擇唯一的顏色。 我不想映射十六進制代碼中的顏色值,因為我還想隨着時間的推移淡化每個條目的顏色。 顏色必須始終將RGB值之一設置為零(這就像一組明亮的原色)。

有一個聰明的數學解決方案可以做到這一點嗎?

如果閱讀此文的數學大師能分享一些見解,我將不勝感激。 :-)

您真的限制自己只能使用六種“基本”顏色嗎?

255 255 0
255 0 255
0 255 255

0 0 255
0 255 0
255 0 0

我想您將對這些顏色應用線性函數以嘗試淡化它們。 這不一定像您認為的那樣好看-RGB表示不是很線性。 您可以通過使用HSV或HSL表示廉價地近似更好的“線性”表示。 它們肯定不是完美的,但是會感覺比RGB更自然。

至於將IP地址映射為顏色,您可以將這些顏色組合存儲在數組中,並使用簡單的哈希函數從六個元素中進行選擇。 這樣的事情可能就足夠了:

b1, b2, b3, b4 = <split the four bytes from an IP address>
index = (b1 * 17 + (b2 * 17 + (b3 * 17 + b4))) % 6

(我剛剛從空中挑出了乘法器17 ,它的二進制表示形式是10001 ,這意味着地址中每個字節的位都彼此“被抹了”。可能會有更好的值。一旦獲得了幾個選擇的顏色和少數IP地址,您可以嘗試將乘數更改為例如2153然后查看最有意義的方法。)

盡管這不會給您{R,G,B}始終為0的結果,但是HSL表示可能看起來不錯。 例如,讓hue為0到1的十進制值,定義為

(float)(octet[0] + octet[1] << 8 + octet[2] << 16 + octet[3] << 24) / (2^32-1)

,其中每個octet[i]是一個無符號字節, ^是冪)。 然后根據您的喜好手動設置亮度和飽和度。 只是一個主意!

另外,這使褪色變得容易(只需從飽和度/亮度中減去“時間”的一部分)。

您是否正在使用數據庫存儲關系? 您可以隨時獲取用戶的IP地址

<?php
    function userIP(){
        if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
            $userIp=$_SERVER['HTTP_X_FORWARDED_FOR'];
        } else {
            $userIp=$_SERVER['REMOTE_ADDR'];
        }
        return trim($userIp);
    }
?>

然后使用該函數設置IP的可用變量:

<?php
    $Users_IP_address = userIP();
?> 

有了該顏色后,就可以分配一種未使用的顏色,並保存關聯以供將來參考。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM