🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
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); #设置背景色透明(后面图片覆盖时不会变色) imageColorTransparent($im, $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.打开图片源文件资源 $img_info = getimagesize('./bg.jpg'); switch ($img_info[2]) { case 1: $im= imagecreatefromgif('./bg.jpg'); break; case 2: $im= imagecreatefromjpeg('./bg.jpg'); break; case 3: $im = imagecreatefrompng('./bg.jpg'); break; default: $im = imagecreatefromjpeg('./bg.jpg'); break; } //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.保存图像 switch ($img_info[2]) { case 1: imagegif($small, './sbg.jpg'); break; case 2: imagejpeg($small, './sbg.jpg'); break; case 3: imagegif($small, './sbg.jpg'); break; default: imagejpeg($small, './sbg.jpg'); break; } /* 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); ?> ~~~