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);
?>

运行结果如下图:

原文地址:https://www.cnblogs.com/ZSK991656110/p/4968320.html