gd库是php最常用的图片处理库之一(另外一个是imagemagick),可以生成图片、验证码、水印、缩略图等等。要使用gd库首先需要开启gd库扩展,
windows系统下需要在php.ini中将extension=php_gd2.dll 前边的分号去掉然后重启web服务器,
linux系统下一般在编译php时已经开启gd库扩展,要是没有开启gd库扩展则需要先编译安装freetype ,jpegsrc,libpng再用phpize安装扩展库进行编译安装。
图像生成:
<?php ???/* ????用windows画图板画图 ?????1.新建空白画布(指定宽高) ?????2.创建颜料.(红,r 绿g ?蓝b,三原色组成的. 三原色由弱到强各可以选0-255之间) ?????3.画线,写字,画图形,填充等 ?????4.保存/输出图片 ?????5.销毁画布 ????*/ ???//用gd库来画图,仍是以上5个步骤. ???// 1:造画布,以资源形式返回 imagecreatetruecolor(宽,高); ???$im = imagecreatetruecolor(300,200); ???// 2: 创建颜料 imagecolorallocate(画布, 红,绿,蓝) ???$gray = imagecolorallocate($im,100,100,100); ???// 3: 填充画布 ???imagefill($im,0,0,$gray); ???// 4: 保存成图片 imagepng(画布 [, 保存位置 ]),imagejpeg(),imagegif() ???header(‘content-type:image/jpeg‘); ???imagepng($im); ???// 5: 销毁画布 ?销毁画面 imagedestroy(画布) ????imagedestroy($im);?>
缩率图
<?php ????/* ???步骤: ????1.打开图片源文件资源 ????2.获得源文件的宽高 ????3.使用固定的公式计算新的宽高 ????4.生成目标图像资源 ????5.进行缩放 ????6.保存图像 ????7.释放资源 ????*/ ???//1.打开图片源文件资源 ???$im = imagecreatefromjpeg(‘./bg.jpg‘); ???//2.获得源文件的宽高 ???$fx = imagesx($im); // 获取宽度 ???$fy = imagesy($im); // 获取高度 ???//3.使用固定的公式计算新的宽高 ???$sx = $fx/2; ???$sy = $fy/2; ???//4.生成目标图像资源 ???$small = imagecreatetruecolor($sx,$sy); ???//5.进行缩放 ???imagecopyresampled($small,$im,0,0,0,0,$sx,$sy,$fx,$fy); ???//6.保存图像 ???if(imagejpeg($small,‘./sbg.jpg‘)) { ????echo ‘保存成功‘; ???} else { ????????echo ‘保存失败‘; ???} ???//7.释放资源 ???imagedestroy($im); ???imagedestroy($small); ?>
水印生成
<?php ????/* ???步骤: ???????1.分别创建大小图画布并获取它们的宽高 ???????2.添加文字水印 ???????3.执行图片水印处理 ???????4.输出 ???????5.销毁画布 ????*/ ???//1.分别创建大小图画布并获取它们的宽高 ???$big = imagecreatefromjpeg(‘./bg.jpg‘); ???$bx = imagesx($big); ???$by = imagesy($big); ???$small = imagecreatefrompng(‘./tu.png‘); ???$sx = imagesx($small); ???$sy = imagesy($small); ???//2.添加水印文字 ???$blue = imagecolorallocate($big,0,0,255); ???imagettftext($big,16,0,100,100,$blue,‘./msyh.ttf‘,‘骄傲的少年‘); ???//3.执行图片水印处理 ???imagecopymerge($big,$small,$bx-$sx,0,0,0,$sx,$sy,37); ???//4.输出到浏览器 ???header(‘content-type: image/jpeg‘); ???imagejpeg($big); ???//5.销毁画布 ???imagedestroy($big); ???imagedestroy($small); ?????>
验证码
<?php ????/* ???步骤: ???????1.创建画布 ???????2.造颜料 ???????3.填充背景颜色 ???????4.画干扰点 ???????5.画噪点 ???????6.写字符串 ???????7.输出图片 ???????8.销毁画布 ????*/ ???//1.创建画布 ???$im=imagecreatetruecolor(50, 30); ???//2.造颜料 ???$gray = imagecolorallocate($im,30,30,30); ???$red = imagecolorallocate($im,255,0,0); ???$blue = imagecolorallocate($im, 100, 255, 255); ???//3.填充背景颜色 ?????imagefill($im,0,0,$blue); ???//4.画干扰点 ???for ($i=0; $i <4 ; $i++) { ?????????imageline($im, rand(0,20),0,100,rand(0,60),$red); ???} ???//5.画噪点 ??????????for($i=0;$i<100;$i++){ ??????????????imagesetpixel($im,rand(0,50),rand(0,30),$gray); ??????????} ????//6.写字符串 ???$str=substr(str_shuffle(‘ABCDEFGHIJKMNPQRSTUVWXYZabcdefghijkmnpqrstuvwxyz23456789‘),0,4); ???imagestring($im,5,5,5,$str,$red); ???????//7.输出图片 ??????????header(‘content-type:image/png‘); ??????????imagepng($im); ????????//8.销毁画布 ???????imagedestroy($im);?>
在使用过程中。如果只是需要输出图片。可以使用 imagepng() 的第二个参数。比如
imagepng($im,‘图片存储路径‘);
【PHP】使用GD库实现 ?图像生成、缩放、logo水印和简单验证码
原文地址:https://www.cnblogs.com/richerdyoung/p/9582450.html