大脑分析 姓名算法

php

2010-12-31 12:37

 美图秀秀        http://4.app.meitu.com/ (原)

看挺有创意的,咱也模仿个。  http://0419.cn/2011/

 <?

$n=trim($_POST['name']);        //要测试的名字
if ($n==''){                                //没输入名字输出默认图片
 echo "<img src='default.gif' width='245' height='280'  />";
 die();
}
$pin=SpGetPinyin($n);            //获取拼音函数 

for($i=0;strlen($pin)-1>$i;$i++){
$abc+=ord(substr($pin,$i,1));    // 把每个字母的ASCII码值累加在一起
}                                                //a-z  97-122 

$w=strlen($n);                           //名字的字母个数
$r=intval($abc/$w*0.3);            //假设准备40张图片  z 最大是122   所以缩小数值
if($r>40){$r-=40;}
header("Content-Type:text/html;charset=GB2312");
header("Content-type: image/jpeg");                 //向浏览器输出文件头
$image="./images/pic_$r.jpg";                           //定义变量指向图像文件
$im=imagecreatefromjpeg($image);                  //载入图像
$yellow=ImageColorAllocate($im,176,37,30);    //定义黄色
$font="C://WINDOWS//Fonts//simhei.ttf";           //定义字体 
$str =iconv('gb2312','utf-8',$n);                        //编码转换

imagettftext($im,15,0,40,30,$yellow,$font,$str);        //在x:40 y:30的位置输出汉字    //判断名字是长度然后调整输出位置

imagejpeg($im);              //输出图像
imagedestroy($im);         //销毁图像

 

//获取拼音函数

function SpGetPinyin($str,$ishead=0)
{
 $restr = '';
 $str = trim($str);
 $slen = strlen($str);
 if($slen<2)
 {
  return $str;
 }
 
  $fp = fopen('./pinyin.dat','r');   //织梦里的
  while(!feof($fp))
  {
   $line = trim(fgets($fp));
   $pinyins[$line[0].$line[1]] = substr($line,3,strlen($line)-3);
  }
  fclose($fp);
 
 
 for($i=0;$i<$slen;$i++)
 {
  if(ord($str[$i])>0x80)
  {
   $c = $str[$i].$str[$i+1];
   $i++;
   if(isset($pinyins[$c]))
   {
    if($ishead==0)
    {
     $restr .= $pinyins[$c];
    }
    else
    {
     $restr .= $pinyins[$c][0];
    }
   }else
   {
    $restr .= "_";
   }
  }else if( eregi("[a-z0-9]",$str[$i]) )
  {
   $restr .= $str[$i];
  }
  else
  {
   $restr .= "_";
  }
 }
 
 return $restr;
}

?>