场景一:普通验证码
<?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');
网友评论