用PHP生成图片,你知道验证是怎么生成的吗?YanZhengMa.php
<?php
//生成验证码图片
Header("Content-type: image/PNG");
srand((double)microtime()*1000000);//播下一个生成随机数字的种子,以方便下面随机数生成的使用session_start();//将随机数存入session中
$_SESSION['authnum']="";
$im = imagecreate(62,20); //制定图片背景大小$black = ImageColorAllocate($im, 0,0,0); //设定三种颜色
$white = ImageColorAllocate($im, 255,255,255);
$gray = ImageColorAllocate($im, 200,200,200); imagefill($im,0,0,$gray); //采用区域填充法,设定(0,0)while(($authnum=rand()%100000)<10000);
//将四位整数验证码绘入图片
$_SESSION['authnum']=$authnum;
imagestring($im, 5, 10, 3, $authnum, $black);
// 用 col 颜色将字符串 s 画到 image 所代表的图像的 x,y 座标处(图像的左上角为 0, 0)。
//如果 font 是 1,2,3,4 或 5,则使用内置字体for($i=0;$i<200;$i++) //加入干扰象素
{
$randcolor = ImageColorallocate($im,rand(0,255),rand(0,255),rand(0,255));
imagesetpixel($im, rand()%70 , rand()%30 , $randcolor);
}
ImagePNG($im);
ImageDestroy($im);
?> test.php
<? session_start();?>
<FORM METHOD=POST ACTION="">
<input type=text name=number maxlength=4><img src="YanZhengMa.php?act=init">
<INPUT TYPE="submit" name="sub">
</FORM>
<?
//检验校验码
if(isset($HTTP_POST_VARS["sub"])):
if($HTTP_POST_VARS["number"] != $HTTP_SESSION_VARS[login_check_number] || empty($HTTP_POST_VARS["number"])){
echo "校验码不正确!" ;
}else{
echo"验证码通过!";
}
endif;
show_source('test.php');
//以上本页的源码
//以下是生成验证码的源码
show_source('YanZhengMa.php');
?>
<?php
//生成验证码图片
Header("Content-type: image/PNG");
srand((double)microtime()*1000000);//播下一个生成随机数字的种子,以方便下面随机数生成的使用session_start();//将随机数存入session中
$_SESSION['authnum']="";
$im = imagecreate(62,20); //制定图片背景大小$black = ImageColorAllocate($im, 0,0,0); //设定三种颜色
$white = ImageColorAllocate($im, 255,255,255);
$gray = ImageColorAllocate($im, 200,200,200); imagefill($im,0,0,$gray); //采用区域填充法,设定(0,0)while(($authnum=rand()%100000)<10000);
//将四位整数验证码绘入图片
$_SESSION['authnum']=$authnum;
imagestring($im, 5, 10, 3, $authnum, $black);
// 用 col 颜色将字符串 s 画到 image 所代表的图像的 x,y 座标处(图像的左上角为 0, 0)。
//如果 font 是 1,2,3,4 或 5,则使用内置字体for($i=0;$i<200;$i++) //加入干扰象素
{
$randcolor = ImageColorallocate($im,rand(0,255),rand(0,255),rand(0,255));
imagesetpixel($im, rand()%70 , rand()%30 , $randcolor);
}
ImagePNG($im);
ImageDestroy($im);
?> test.php
<? session_start();?>
<FORM METHOD=POST ACTION="">
<input type=text name=number maxlength=4><img src="YanZhengMa.php?act=init">
<INPUT TYPE="submit" name="sub">
</FORM>
<?
//检验校验码
if(isset($HTTP_POST_VARS["sub"])):
if($HTTP_POST_VARS["number"] != $HTTP_SESSION_VARS[login_check_number] || empty($HTTP_POST_VARS["number"])){
echo "校验码不正确!" ;
}else{
echo"验证码通过!";
}
endif;
show_source('test.php');
//以上本页的源码
//以下是生成验证码的源码
show_source('YanZhengMa.php');
?>
header('Content-Type:image/jpeg');/* 用传输过来的image_id参数,从数据库中读取图片的真正保存路径,保存到$url变量内。 */
$sql = 'SELECT image_url FROM images WHERE image_id='.$_GET['image_id'];
$res = mysql_query($sql);
... .../* 通过imagecreatefromjpeg函数,将jpg图片资源数据读取入变量$img内。 */
$img = imagecreatefromjpeg($url);/* 如果读取成功,使用imagejpeg函数,将图片数据输出至浏览器,完毕之后,使用imagedestroy释放资源。 */
if($img !== FALSE){
imagejpeg($img);
/* 对于短小的脚本来说,这个资源释不释放都无所谓,一个页面执行完毕之后该释放的系统自动释放了。 */
imagedestroy($img);
}
这个也可以用来做简单的防图片盗链。
这个应该是uch里面的调用头象的功能。
图片的显示,是跟你自己说的一样
不过楼上面的兄弟说的也很正确,你可以理解多种方法生成图片。
还有个问题,我自己创建了一个a.php,里面就一行代码
<?php
echo "/copyright.jpeg";
?>
然后我再b.html中加了一个地址<img src="a.php">
请问怎么每效果,谢谢,刚学
//a.php
<?php
header('content-type:image/jpeg');
echo file_get_contents('a.jpg');//读取a.jpg并输出
?>//a.htm
<img src="a.php"/>
也就是说,php程序echo的是图片文件的二进制数据,而不是图片的地址。
1、设置头标为JPEG的图像,告诉给浏览器,这个是JPG图片(header语句)
2、file_get_contents,就是把jpg文件的二进制编码取出然后完整的输出,没有存入变量,只是存入了内存的某个地方。