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(,); // 2: 创建颜料 imagecolorallocate(画布, 红,绿,蓝)
$gray = imagecolorallocate($im,,,); // 3: 填充画布
imagefill($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.打开图片源文件资源
$im = imagecreatefromjpeg('./bg.jpg'); //2.获得源文件的宽高
$fx = imagesx($im); // 获取宽度
$fy = imagesy($im); // 获取高度 //3.使用固定的公式计算新的宽高
$sx = $fx/;
$sy = $fy/;
//4.生成目标图像资源
$small = imagecreatetruecolor($sx,$sy); //5.进行缩放
imagecopyresampled($small,$im,,,,,$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,,,);
imagettftext($big,,,,,$blue,'./msyh.ttf','骄傲的少年'); //3.执行图片水印处理
imagecopymerge($big,$small,$bx-$sx,,,,$sx,$sy,); //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(, ); //2.造颜料
$gray = imagecolorallocate($im,,,);
$red = imagecolorallocate($im,,,);
$blue = imagecolorallocate($im, , , ); //3.填充背景颜色
imagefill($im,,,$blue); //4.画干扰点
for ($i=; $i < ; $i++) {
imageline($im, rand(,),,,rand(,),$red);
} //5.画噪点
for($i=;$i<;$i++){
imagesetpixel($im,rand(,),rand(,),$gray);
} //6.写字符串
$str=substr(str_shuffle('ABCDEFGHIJKMNPQRSTUVWXYZabcdefghijkmnpqrstuvwxyz23456789'),,);
imagestring($im,,,,$str,$red); //7.输出图片
header('content-type:image/png');
imagepng($im); //8.销毁画布
imagedestroy($im); ?>
在使用过程中。如果只是需要输出图片。可以使用 imagepng() 的第二个参数。比如
imagepng($im,'图片存储路径');