手写验证码和各种水印

2018-07-29  本文已影响0人  码课sir

场景一:普通验证码

<?php
//第一步:生成随机字符串
$array=array_merge(range('a','z'),range('A','Z'),range(0,9));   //生成字母、数字的字符数组
$index=array_rand($array,4);    //随机取出4个字符,返回的字符的下标
shuffle($index);    //打乱数组
$str='';    //拼接随机字符串
foreach($index as $i) {
    $str.=$array[$i];
}
//第二步:制作背景图
$img=imagecreate(150,25);
imagecolorallocate($img,255,0,0);   //分配背景色
$color=imagecolorallocate($img,255,255,255);    //前景色
//第三步:将字符串写到图片上
$font=5;        //字号,取值1,2,3,4,5
$x=(imagesx($img)-imagefontwidth($font)*strlen($str))/2;
$y=(imagesy($img)-imagefontheight($font))/2;
imagestring($img,$font,$x,$y,$str,$color);  //将字符串写到图片上
//输出
header('content-type:image/jpeg');
imagejpeg($img);

场景二:中文验证码(需要引入中文字体到虚拟目录下)

<?php
//第一步:生成随机字符串
$array=['锄','禾','日','当','五','天','人','口','收','上','中'];
$index=array_rand($array,4);
shuffle($index);    //打乱数组
$str='';    //拼接随机字符串
foreach($index as $i) {
    $str.=$array[$i];
}
//第二步:制作背景图
$img=imagecreate(150,25);
imagecolorallocate($img,255,0,0);   //分配背景色
$color=imagecolorallocate($img,255,255,255);    //前景色
//第三步:计算字符串的范围
$size=10;   //字号
$angle=10;  //角度
$fontfile='./ttf/simhei.ttf';   //字体路径
$info=imagettfbbox($size,$angle,$fontfile,$str);    //返回文本范围
$x=(imagesx($img)-($info[4]-$info[6]))/2;   //起始点X坐标
$y=(imagesy($img)+($info[1]-$info[7]))/2;   //起始点y坐标
//第四步:将字符串写到图片上
imagettftext($img,$size,$angle,$x,$y,$color,$fontfile,$str);
//输出
header('content-type:image/jpeg');
imagejpeg($img);

场景三:打开图片添加验证码

<?php
//第一步:生成随机字符串
$array=array_merge(range('a','z'),range('A','Z'),range(0,9));   //生成字母、数字的字符数组
$index=array_rand($array,4);    //随机取出4个字符,返回的字符的下标
shuffle($index);    //打乱数组
$str='';    //拼接随机字符串
foreach($index as $i) {
    $str.=$array[$i];
}
//第二步:打开图片创建资源
$path='./captcha/captcha_bg'.rand(1,5).'.jpg';
$img=imagecreatefromjpeg($path);
//第三步:将字符串写到图片上
$color=imagecolorallocate($img,255,255,255);    //白色
if(rand(1,2)==1)
    $color=imagecolorallocate($img,0,0,0);      //黑色
$font=5;
$x=(imagesx($img)-(imagefontwidth($font)*strlen($str)))/2;
$y=(imagesy($img)-imagefontheight($font))/2;
imagestring($img,$font,$x,$y,$str,$color);
//输出
header('content-type:image/png');
imagepng($img);

场景四:文字水印

<?php
$str='呵呵呵';
//打开图片
$path='./images/face.jpg';
$img=imagecreatefromjpeg($path);
//计算字符串的范围
$size=40;   //字号
$angle=0;   //角度
$fontfile='./ttf/simhei.ttf';   //字体路径
$info=imagettfbbox($size,$angle,$fontfile,$str);    //返回文本范围
$x=imagesx($img)-($info[4]-$info[6]);   //起始点X坐标
$y=imagesy($img)-10;    //起始点y坐标
//第四步:将字符串写到图片上
$color=imagecolorallocate($img,255,0,0);
imagettftext($img,$size,$angle,$x,$y,$color,$fontfile,$str);
//输出
header('content-type:image/jpeg');
imagejpeg($img);

场景五:图片水印

<?php
$dst_img=imagecreatefromjpeg('./images/face.jpg');  //目标图
$src_img=imagecreatefrompng('./images/logo.fw.png');    //源图
$dst_x=imagesx($dst_img)-imagesx($src_img); //目标图开始粘贴的x
$dst_y=imagesy($dst_img)-imagesy($src_img); //目标图开始粘贴的y
$src_w=imagesx($src_img);   //源图的宽度
$src_h=imagesy($src_img);   //源图的高度
imagecopy($dst_img,$src_img,$dst_x,$dst_y,0,0,$src_w,$src_h);   //将源图拷贝到目标图上
//显示
header('content-type:image/png');
imagepng($dst_img);

场景六:生成缩略图、裁切图片

<?php
$dst_img=imagecreatetruecolor(300,300);         //创建目标图
$src_img=imagecreatefromjpeg('./images/4.jpg'); //创建源图资源
//制作缩略图
/*
$src_w=imagesx($src_img);
$src_h=imagesy($src_img);
imagecopyresampled($dst_img,$src_img,0,0,0,0,300,300,$src_w,$src_h);
imagepng($dst_img,'./images/small.png');
*/
//裁切
imagecopyresampled($dst_img,$src_img,0,0,160,75,300,300,300,300);
imagepng($dst_img,'./images/small02.png');
上一篇下一篇

猜你喜欢

热点阅读