PHP 图形处理
计应134(实验班) 郑寿奎
一、图片添加文字
步骤:
(1)通过header()函数定义输出图像类型
(2)通过imagecreatefromipeg()函数载入照片
(3)通过imagecolorallocate()函数设置输出字体颜色
(4)定义字体
(5)通过iconv()函数对字体的编码格式进行转换
(6)通过imageTTFText()函数像照片添加文字
(7)通过imagejpeg()函数创建图片
(8)通过imagedestroy()函数释放资源
<?php header("content-type:image/jpeg"); //定义输出为图像类型 $im=imagecreatefromjpeg("images/photo.jpg"); //载入照片 $textcolor=imagecolorallocate($im,56,73,136);//设置字体颜色为蓝色,值为RGB颜色值 $fnt="c:/windows/fonts/simhei.ttf"; //定义字体 $motto=iconv("gb2312","utf-8","长白山天池"); //定义输出字体串 imageTTFText($im,220,0,480,340,$textcolor,$fnt,$motto); //写TTF文字到图中 imagejpeg($im); //建立JPEG图形 imagedestroy($im); //结束图形,释放内存空间 ?>
在imageTTFText()函数中,$im是指照片,220是字体的大小,0是文字的水平方向,480和340是文字的坐标,$textcolor是文字的颜色,$fnt是字体,$motto是照片文字
运行结果如下图:
二、使用图像处理技术生成验证码
1)生成4位的验证码:yzm.php
<?php session_start(); header("content-type:image/png"); //设置创建图像的格式 $image_width=70; //设置图像宽度 $image_height=18; //设置图像高度 srand(microtime()*100000); //设置随机数的种子 for($i=0;$i<4;$i++){ //循环输出一个4位的随机数 $new_number.=dechex(rand(0,15)); } $_SESSION[check_checks]=$new_number; //将获取的随机数验证码写入到SESSION变量中 $num_image=imagecreate($image_width,$image_height); //创建一个画布 imagecolorallocate($num_image,255,255,255); //设置画布的颜色 for($i=0;$i<strlen($_SESSION[check_checks]);$i++){ //循环读取SESSION变量中的验证码 $font=mt_rand(3,5); //设置随机的字体 $x=mt_rand(1,8)+$image_width*$i/4; //设置随机字符所在位置的X坐标 $y=mt_rand(1,$image_height/4); //设置随机字符所在位置的Y坐标 $color=imagecolorallocate($num_image,mt_rand(0,100),mt_rand(0,150),mt_rand(0,200)); //设置字符的颜色 imagestring($num_image,$font,$x,$y,$_SESSION[check_checks][$i],$color); //水平输出字符 } imagepng($num_image); //生成PNG格式的图像 imagedestroy($num_image); //释放图像资源 ?>
2)登录验证:index.php
<form name="form" method="post" action=""> 验证码:<img src="yzm.php" /> <input type="text" name="yzm" id="yzm"/> <input type="submit" name="submit" value="提交"/> </form> <?php session_start(); if($_POST["submit"]!=""){ $checks=$_POST["yzm"]; if($checks==""){ echo "<script> alert('验证码不能为空');</script>"; }else{ if($checks==$_SESSION[check_checks]){ echo "<script> alert('验证码正确');</script>"; }else{ echo "<script> alert('您输入的验证码不正确!');window.location.href='index.php';</script>"; }} } ?>
在表单中输出图像的内容,提交表单是判断是否正确
运行结果如下图:
三、水印图片
即:一张图片印在另一张图片上
<?php $dst_path = '1.jpg'; $src_path = '2.jpg'; //创建图片的实例 $dst = imagecreatefromstring(file_get_contents($dst_path)); $src = imagecreatefromstring(file_get_contents($src_path)); //获取水印图片的宽高 list($src_w, $src_h) = getimagesize($src_path); //将水印图片复制到目标图片上,最后个参数50是设置透明度,这里实现半透明效果 imagecopymerge($dst, $src, 10, 10, 0, 0, $src_w, $src_h, 50); //如果水印图片本身带透明色,则使用imagecopy方法 //imagecopy($dst, $src, 10, 10, 0, 0, $src_w, $src_h); //输出图片 list($dst_w, $dst_h, $dst_type) = getimagesize($dst_path); switch ($dst_type) { case 1://GIF header('Content-Type: image/gif'); imagegif($dst); break; case 2://JPG header('Content-Type: image/jpeg'); imagejpeg($dst); break; case 3://PNG header('Content-Type: image/png'); imagepng($dst); break; default: break; } imagedestroy($dst); imagedestroy($src); ?>
运行结果如下图: