一直在找类似于大众点评网那样的将商家的电话号码转为图片格式的方法,用这样的方法可以有效地防止网站信息被采集。今天,我在学而时习之发现了一段代码,据说是可以实现这样的功能。(英文或数字,如果要支持中文的话需要额外添加字库)
先看一段用php将文字生成图片的代码,预热一下。
调用页面 index.php:
<img src="CharImg.php?ment='中国'">
CharImg.php:
<?php $ment = $_GET['ment']; $im = imagecreate(450,50); $white = imagecolorallocate($im,56,180,218); //调整合适,达到消除锯齿效果 imagecolortransparent($im,$white); $black = imagecolorallocate($im,255, 255,255); imagettftext($im,26,0,0,40,$black,"C:windowsFontsFZDHTJW.ttf",$ment); //字体路径 header("Content-type:image/png"); imagepng($im); ?>
下面是正式的用PHP将数据库中的电话号码转换为图片格式的代码:
<?php //前面不要有空行 $id=$_GET[id]; include("admin/config.php"); $sql="select * from user where id=$id"; $data=mysql_fetch_array(mysql_query($sql)); $p=SBC_DBC($data[Phone],1); function get_str($str,$strlen=16) { $str=stripslashes($str); for($i=0;$i<$strlen;$i++) if(ord(substr($str,$i,1))>0xa0) $j++; if($j%2!=0) $strlen++; $tmp_str=substr($str,0,$strlen); return $tmp_str; } if($p<>''){ //生成5位的数字图片 Header("Content-type:image/png"); //告诉浏览器,下面的数据是图片,而不要按文字显示 //定义图片宽高 $nwidth=120; $nheight=25; $im=@imagecreate($nwidth,$nheight) or die("Can't initialize new GD image stream"); //建立图象 //图片色彩设置 $background_color=imagecolorallocate($im,255,255,255); //匹配颜色 $text_color=imagecolorallocate($im,23,14,91); //绘制图片边框 imagefilledrectangle($im,0,0,$nwidth-1,$nheight-1,$background); //矩形区域着色 imagerectangle($im,0,0,$nwidth-1,$nheight-1,$background_color); //绘制矩形 //srand((double)microtime()*1000000); //取得目前时间的百万分之一秒值,以执行时的百万分之一秒当乱数种子 //$randval=rand(); $randval=$p; //5位数 imagestring($im,8,10,2,$randval,$text_color); //绘制横式字串 //加入干扰因素 //for($i=0;$i<478;$i++) //{ //$randcolor=imagecolorallocate($im,rand(0,255),rand(0,255),rand(0,255)); //imagesetpixel($im,rand()%100,rand()%30,$randcolor); //点 //} //imagestring($im,3,5,5,"A Simple Text String",$text_color); //imageinterlace($im,1); imagepng($im); //建立png图型 imagedestroy($im); //结束图型 }else{ echo "<font size=2>商家未输入电话号码</font>"; } ?>