在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
1. 开启GD2图像处理并检测在php.ini开启GD库 2. 画布坐标系说明二. 图像基本操作(步骤)1. 创建图像创建画布(图像资源) 创建的方法: 方法一: 创建真彩色图像 方法二: 基于现有图像创建 2. 绘制图像如:将字符或汉字写入图像,缩略图,水印图像….. 3. 输出图像生成的图像在哪个地方显示. 两个地方 1.通过浏览器来显示 Header(‘content-type:image/jpeg’); //设置让浏览器显示图像 Imagejpeg(图像资源); //将图像资源输出 2.图像以文件的形式在操作系统中显示. Imagejpeg(图像资源,’文件名.jpg’); 如: Imagejpeg(图像资源,’1.jpg’) 4. 销毁图像将图像资源销毁,目的释放内存. Imagedestroy(图像资源); //当前页面有多少图像资源就销毁多少. 方法一:创建图片资源生成验证码: 1 <?php 2 // 第一步:创建图像资源 3 4 5 // 方法一:创建真彩色图像 6 // imagecreatetruecolor(width, height); 单位是像素 7 $image = imagecreatetruecolor(100, 30); 8 // 分配颜色 9 // imagecolorallocate(图像资源, red, green, blue);RGB,取值0~255 10 $bgcolor = imagecolorallocate($image,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255)); 11 // imagesx($image); //获取画布的宽度 12 // imagesy($image); //获取画布的高度 13 14 15 // 填充背景 16 // imagefill(图像资源,x,y,用什么颜色填充背景); x,y是填充的坐标 17 imagefill($image,0,0,$bgcolor); 18 // 第二步:图像绘制 19 /* 20 绘制图像(建议)的操作方法 21 1.首先将核心的函数(形参)写出来,然后在个形参前加$符号 22 2.在调用函数之前,对个形参从左到右一个一个进行设置 23 */ 24 25 26 27 // 在图片中写入字符串 28 // font 字符串的大小 , x,y 写入时的坐标 string 写入的字符串 color 文字颜色 29 $font = 5; //1~5 30 31 // 验证码开始 32 $str = 'qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890'; 33 $string = substr(str_shuffle($str),0,5); //打乱字符 截取5个字符 34 // 验证码结束 35 36 37 // $string = 'helloworld'; //注意:不支持汉字 38 /* 39 字符水平坐标 40 字符水平坐标 = (画布宽度-所有字符的宽度和)/2 41 字符水平坐标 = (300-所有字符的宽度和)/2 42 字符水平坐标 = (300-一个字符宽度 * 字符个数)/2 43 字符水平坐标 = (300-imagefontwidth($font) * 字符个数)/2 44 字符水平坐标 = (300-imagefontwidth($font) * strlen($string))/2 45 */ 46 $x = ( imagesx($image)-imagefontwidth($font) * strlen($string))/2; 47 /*字符的垂直方向 48 (画布的高度 - 一个字符的高度)/2 49 (200-一个字符的高度)/2 */ 50 $y = ( imagesy($image)-imagefontheight($font))/2; 51 $color = imagecolorallocate($image,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255)); 52 imagestring($image, $font, $x, $y, $string, $color); 53 // mt_rand(min,max); 产生随机数 54 // 加入干扰线 55 for ($i=0; $i <15 ; $i++) { 56 $linecolor = imagecolorallocate($image,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255)); 57 imageline($image,mt_rand(0,100),mt_rand(0,100),mt_rand(0,100),mt_rand(0,50),$linecolor); 58 } 59 // 加入干扰像素点 60 61 for ($i=0; $i <100 ; $i++) { 62 $pixcolor = imagecolorallocate($image,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255)); 63 imagesetpixel($image, mt_rand(0,50), mt_rand(0,50), $pixcolor); 64 } 65 66 67 68 /*// 画圆,弧 69 $cx = 100; 70 $cy = 100; 71 72 $width = 150; 73 $height = 150; 74 75 $start = 0; 76 $end = 360; 77 $color = imagecolorallocate($image,0,255,255); 78 // cx,cy 圆形的坐标, width,height 长轴,短轴 start,end 弧的开始和结束的角度,默认开始的是3点钟方向,顺序是顺时针 color线的颜色 79 imagearc($image, $cx, $cy,$width, $height, $start, $end, $color);*/ 80 81 82 83 84 /*//画矩形 85 // x1,y1 左上角坐标 X2,y2 右下角坐标 86 // imagerectangle(image, x1, y1, x2, y2, color); 87 $x1 = 20; 88 $y1 = 20; 89 90 $x2 = 150; 91 $y2 = 150; 92 $color = imagecolorallocate($image,0,0,255); 93 imagerectangle($image, $x1, $y1, $x2, $y2, $color);*/ 94 95 96 97 98 /*// 画一条直线 99 $x1 = 0; 100 $y1 = 0; 101 102 $x2 = 100; 103 $y2 = 100; 104 $color = imagecolorallocate($image,0,255,0); //红线 105 106 // 调用函数 107 // imageline(图像资源,x1,y1,x2,y2,线的颜色); 108 imageline($image,$x1,$y1,$x2,$y2,$color); 109 */ 110 111 112 113 114 // 方法二:基于现有的图像 115 116 // 第三步:输出图像 117 // 1.通过浏览器来显示 118 // header('content-type:image/jpeg'); 119 header('content-type:image/png'); 120 // imagejpeg(图像资源); 121 imagejpeg($image); 122 123 124 // 2.生成单独文件 125 // imagejpeg($image,'1.jpg'); 126 // 第四步:销毁图像 127 // imagedestroy(图像资源); 128 imagedestroy($image); 方法二: 基于现有的图像生成的验证码: 1 <?php 2 // 第一步:创建图像资源 3 4 5 // 方法二:基于现有的图像 6 $filename = './sucai/code.png'; 7 $image = imagecreatefrompng($filename); 8 9 // 第二步:图像绘制 10 // 将TTF文字字符写入图像 11 // size 字符大小 angle旋转的角度 x,y写入的坐标 color字符颜色 fontfile字体路径 text准备写入的字符 12 $size = 20; 13 $angle = 0; 14 $x = 12; 15 $y = 25; 16 $color = imagecolorallocate($image,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255)); 17 $fontfile = './sucai/Candarai.ttf'; 18 // 验证码开始 19 $str = 'qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890'; 20 $text = substr(str_shuffle($str),0,5); //打乱字符 截取5个字符 21 // 验证码结束 22 // $text = '中国江南皮鞋厂专属水印'; 23 imagettftext($image, $size, $angle, $x, $y, $color, $fontfile, $text); 24 25 26 27 28 29 // 第三步:输出图像 30 // 1.通过浏览器来显示 31 // header('content-type:image/jpeg'); 32 header('content-type:image/png'); 33 // imagejpeg(图像资源); 34 imagejpeg($image); 35 36 37 // 2.生成单独文件 38 // imagejpeg($image,'1.jpg'); 39 // 第四步:销毁图像 40 // imagedestroy(图像资源); 41 imagedestroy($image); 五.创建方法:注意:
1. 方法一: 创建一个真彩色图像创建一个真彩色图像 (空画布) 为真彩色图像: 分配颜色 为真彩色图像: 填充颜色
注意:
(1) 实例:输出字符串图像,让文本居于图像的正中
(2)实例:随机验证码,随机验证码居中
(3) 实例:加入干扰元素,点与线
2. 方法二: 创建图像(基于现有图像)Imagecreatefromjpeg(图像路径); Imagecreatefrompng(图像路径); Imagecreatefromgif(图像路径);
通过: getimagesize()获取图像信息: 取得图像的宽度和高度 取得字体的宽度和高度
(1) 在图像上写入TTF字体的文本(支持汉字)imagettftext(image, size, angle, x, y, color, fontfile, text); 1.size //字符大小,没有限制 2.angle //旋转的角度 3.x,y 写入坐标 4.color //字符颜色 5.fontfile //字体的路径 6.text //准备写入的字符
2) 实例:TTF字体的文本(2) 实例:基于现有图像生成TTF验证码(3)实例:将验证码植入到表单中
验证码code.php <?php session_start(); // 第一步:创建图像资源 // 方法二:基于现有的图像 $filename = './sucai/code.png'; $image = imagecreatefrompng($filename); // 第二步:图像绘制 // 将TTF文字字符写入图像 // size 字符大小 angle旋转的角度 x,y写入的坐标 color字符颜色 fontfile字体路径 text准备写入的字符 $size = 20; $angle = 0; $x = 12; $y = 25; $color = imagecolorallocate($image,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255)); $fontfile = './sucai/Candarai.ttf'; // 验证码开始 $str = 'qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890'; $text = substr(str_shuffle($str),0,5); //打乱字符 截取5个字符 // 将验证码写入session $_SESSION['checkcode'] = $text; // 验证码结束 // $text = '中国江南皮鞋厂专属水印'; imagettftext($image, $size, $angle, $x, $y, $color, $fontfile, $text); // 第三步:输出图像 // 1.通过浏览器来显示 // header('content-type:image/jpeg'); header('content-type:image/png'); // imagejpeg(图像资源); imagejpeg($image); // 2.生成单独文件 // imagejpeg($image,'1.jpg'); // 第四步:销毁图像 // imagedestroy(图像资源); imagedestroy($image); (4)通过session对验证码,进行验证(5)实例:制作图像文字水印效果(6)实例:上传图片并加入水印文字1.上传页面: index.php 2.处理页面:upload.php 续上面的代码 (7)实例:生成缩略图imagecopyresampled(dst_image, src_image, dst_x, dst_y, src_x, src_y, dst_w, dst_h, src_w, src_h) 输出目标图像:缩略图 说明: Dst_image //目标图像资源 Src_image//源图像资源 Dst_x,dst_y //目标图像取样坐标 Src_x,src_y //源图像的取样坐标 //以上四个坐标都使用0. 等比缩小. Dst_w,dst_h //目标图像的宽和高 Src_w,src_h //源图像的宽和高 1 <?php 2 // 第一步:创建图像资源 3 4 5 // 方法二:基于现有的图像 6 $src_file = './sucai/1.jpg'; 7 $src_image = imagecreatefromjpeg($filename); 8 9 //imagesx($src_image); //获取画布宽度 10 //imagesy($src_image); //获取画布高度 11 12 // getimagesize($src_image); 13 // list 可以取得数组对应下标的值 14 list($src_w,$src_h)= getimagesize($src_file); 15 $per = 0.5; 16 // 目标宽高 17 $dst_w = $per * $src_w; 18 $dst_h = $per * $src_h; 19 20 $dst_image = imagecreatetruecolor($dst_w,$dst_h); 21 // 第二步:图像绘制 22 //缩略图,将大图等比缩小图 23 imagecopyresampled($dst_image, $src_image, 0, 0, 0, 0, $dst_w, $dst_h, $src_w, $src_h) ; 24 // imagecopyresized(dst_image, src_image, dst_x, dst_y, src_x, src_y, dst_w, dst_h, src_w, src_h); 25 26 // 第三步:输出图像 27 // 1.通过浏览器来显示 28 // header('content-type:image/jpeg'); 29 header('content-type:image/jpeg'); 30 // imagejpeg(图像资源); 31 imagejpeg($dst_image); 32 33 34 // 2.生成单独文件 35 // imagejpeg($image,'1.jpg'); 36 // 第四步:销毁图像 37 // imagedestroy(图像资源); 38 imagedestroy($dst_image); 39 imagedestroy($src_image); (8)实例:制作图像图片水印效果imagecopymerge(dst_im, src_im, dst_x, dst_y, src_x, src_y, src_w, src_h, pct) 输出目标图像,源图像一般设置为logo小图.
说明: dst_im //大图资源 Src_im //小图资源logo src_x,src_y //小图的左角坐标 dst_x ,dst_y //小图左上角这个点在大图中的坐标 src_w,src_h //小图的宽与高 pct //小图的透明度0-100 1 <?php 2 //第一步: 创建图像 3 //方法二: 基于现有的图像 4 $dst_file = './sucai/1.jpg'; //大图 5 $src_file = './sucai/logo.gif'; //小图 6 7 //目标资源,大图 8 $dst_im = imagecreatefromjpeg($dst_file); 9 //源资源logo 10 $src_im = imagecreatefromgif($src_file); 11 12 //获取源logo的宽与高 13 list($src_w, $src_h ) = getimagesize($src_file); 14 list($dst_w, $dst_h ) = getimagesize($dst_file); 15 16 // imagesx($src_image); //获取画布的宽度 17 // imagesy($src_image); //获取画布的高度 18 //list — 把数组中的值赋给一些变量 19 /*echo "<pre>"; 20 print_r(getimagesize($src_file)); 21 echo "</pre>"; 22 echo "<hr>"; 23 die;*/ 24 //list($src_w,$src_h) = getimagesize($src_file); 25 $dst_x = ($dst_w - $src_w)/2; 26 $dst_y = ($dst_h - $src_h)/2; 27 28 $src_x = 0; 29 $src_y = 0; 30 $pct = 50; //0-100 31 imagecopymerge($dst_im, $src_im, $dst_x, $dst_y, $src_x, $src_y, $src_w, $src_h, $pct); 32 33 //第三步: 输出图像 34 header('content-type:image/jpeg'); 35 //imagejpeg(图像资源); 36 imagejpeg($dst_im); 37 38 //第四步: 销毁图像 39 //imagedestroy(图像资源); 40 imagedestroy($dst_im); 41 imagedestroy($src_im); 42 43 ?>
|
2022-08-17
2022-09-18
2022-08-17
2022-07-08
2022-08-15
请发表评论