PHP图形处理
一、图片添加文字
步骤:
(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);
?>
运行结果如下图:


浙公网安备 33010602011771号