PHP identicon是一種利用哈希算法生成唯一圖形的方式。當(dāng)用戶需要頭像卻不想使用真實(shí)照片的時(shí)候,可以使用identicon代替。PHP identicon的原理是將文本轉(zhuǎn)換成哈希值,再將哈希值轉(zhuǎn)換成幾何圖形,并將幾何圖形鏡像并排生成合成圖形。具體實(shí)現(xiàn)方式較為簡(jiǎn)單,可以參考下面的例子。
/** * Generate an Identicon image * @param $data The user data used to generate the Identicon * @param $size The size the Identicon should be in pixels * @param $hashFunction The hash function to use, defaults to md5 * @return An Identicon image */ function generate_identicon($data, $size, $hashFunction='md5') { // Generate the hash value $hash = $hashFunction($data); // Convert the hash value to an array of integers $values = array_map('ord', str_split($hash)); // Generate the colors for the Identicon $red = $values[0]; $green = $values[1]; $blue = $values[2]; // Calculate the block size $blockSize = $size / 7; // Create a blank image $image = imagecreatetruecolor($size, $size); // Fill the image background with white $white = imagecolorallocate($image, 255, 255, 255); imagefill($image, 0, 0, $white); // Draw the blocks for the Identicon for ($i=0; $i<3; $i++) { for ($j=0; $j<5; $j++) { $value = $values[$i*5+$j]; $color = imagecolorallocate($image, $red^$value, $green^$value, $blue^$value); if ($value % 2 == 0) { imagefilledrectangle($image, $j*$blockSize, $i*$blockSize, ($j+1)*$blockSize, ($i+1)*$blockSize, $color); imagefilledrectangle($image, ($j+4)*$blockSize, $i*$blockSize, ($j+5)*$blockSize, ($i+1)*$blockSize, $color); } } } // Output the Identicon image header('Content-Type: image/png'); imagepng($image); imagedestroy($image); }
通過上面的代碼,我們可以看到PHP identicon的主要實(shí)現(xiàn)思路:將用戶數(shù)據(jù)進(jìn)行哈希運(yùn)算,并將哈希值轉(zhuǎn)換成幾何圖形,以達(dá)到頭像的效果。使用identicon的優(yōu)點(diǎn)在于可以保護(hù)用戶的隱私,同時(shí)也更好的維護(hù)平臺(tái)的整體形象。
當(dāng)然,PHP identicon的實(shí)現(xiàn)還有許多細(xì)節(jié)需要考慮,例如生成幾何圖形的算法以及合成多個(gè)幾何圖形的方法等等。并且,一旦有人獲得了用戶數(shù)據(jù),也可以輕松生成對(duì)應(yīng)的identicon,因此在保護(hù)用戶數(shù)據(jù)安全的前提下,PHP identicon的應(yīng)用還需要更加謹(jǐn)慎和嚴(yán)密。
總之,PHP identicon作為一種替代真實(shí)頭像的方式,可以更好的保護(hù)用戶隱私,并且增加平臺(tái)的視覺效果。它的實(shí)現(xiàn)方式簡(jiǎn)單易懂,在以后的開發(fā)中可以加以利用。