在PHP5中的php.ini文件中包含了GD扩展包,只需要取代平GD扩展包的相应注释就可以正常使用。
PHP5包含的GD库正是升级的GD2库,其中包含了支持真彩图像处理的有用的JPG功能,
生成的图形,通过PHP的文档格式进行存放,还可以通过HTML的图片插入方式SRC来获取动态图形。
简单的,如验证码、水印、微缩图。
1、创建图像
一般情况下,生成的图像可以是png、jpg、gif、bmp、jpeg、wbmp
一般流程如下:
(1)设定标头header,即告诉浏览器要生成的MIME类型
(2)创建一个图像区域,以后的操作都基于该图像区域;
(3)在空白图像区域绘制填充背景;
(4)在背景上绘制图形轮廓输入文本;
(5)输出最终图形
(6)清除所有的资源;
(7)其他页面调用图像。
案例1:demo1.php,表示创建一个图像的基本流程,如下——
<?php
//第一步,设置文件MIME类型,输出类型text/html类型是网页类型,默认可以不写
//将输出类型改为图像流
//header('Content-Type:image/wbmp;'); //自动保存
header('Content-Type:image/png;'); //不会自动保存
//第二步,创建一个图形区域,即图像背景
//有两种创建方式
//1、imagecreate——新建一个基于调色的图像,对于资源类型,一般要加上@符号,防止出错
//imagecreate(200, 200);
//2、imagecreatetruecolor(200,200);
//该函数创建了一个图像区域,当没有进行填充的时候,默认的是一个黑色区域。
//返回的是一个资源句柄
$im=imagecreatetruecolor(200, 200);
//第三步,在空白图像区域,绘制颜色、文字、线条等
//填充色换掉,首先必须有个颜色填充器
//imagecolorallocate——为一副图像分配颜色
$blue=imagecolorallocate($im, 0, 102, 255);
//将这个blue颜色填充到背景上去;
//函数imagefill——区域填充
imagefill($im, 0, 0, $blue);
//第四步,在蓝色的背景上输入一些线条、文字等
$white=imagecolorallocate($im, 255, 255, 255);
//imageline———画一条线段
imageline($im, 0, 0, 200, 200, $white);
imageline($im, 200, 0, 0, 200, $white);
//imagestring———水平的画一行字符串
imagestring($im, 5, 80, 20, 'Mr.Lee', $white);
//第五步,输出最终图形;
imagepng($im);
//第六步,将所有的资源清空;
imagedestroy($im);
?>
<?php
//src可以插入各种类型的图片
//demo1.php其实就是一张png图片
header('Content-Type:text/html;charset=gbk');
echo '<img src="demo1.php" alt="图形" title="图形" />';
?>
2、简单的小案例
(1)简单的验证码
a、思想——
首先,创建一个图像,作为背景,见1中的demo1.php,
其次,再利用for循环,“随机数”产生一个随机的四位数,
例如——“echo mt_rand(0, 100);”
(注意:该四位数原理是把一个十进制的数,转换为一个十六进制的数,以“字母a-f + 数字0-9”表示)
将十进制转为十六进制—— dechex()
最后,再调整随机数在图像的位置,进行居中。
案例2-1:简单的验证码
<?php
//简单的验证码
//随机数
//echo mt_rand(0, 100);
//为什么要循环0-15之间的数字for
//因为要实现最简单的字母和数字的混搭;
//16进制——0-9 a—f
//将10进制转换为16进制的函数——dechex()
//创建一个四位数的验证码
for ($i=0;$i<4;$i++){
$nmsg .=dechex(mt_rand(0, 15));//表示产生一个0-15的随机数,并将10进制转为16进制
}
//设置MIME类型;
header('Content-Type:image/png');
//创建一个背景区域;
$im=imagecreatetruecolor(75, 25);
//在空白区域绘制图像、文字
//绘制颜色填充器
$blue=imagecolorallocate($im, 0, 105, 255);
$white=imagecolorallocate($im, 255, 255, 255);
//imagefill填充背景
imagefill($im, 0, 0, $blue);
//imagestring填充字符串
imagestring($im, 5, 20, 4, $nmsg, $white);
//imagepng
imagepng($im);
//销毁图片;
imagedestroy($im);
?>
(2)加载已有的图像
a、设置MIME格式为“image/png”或“image/jpeg”
b、利用魔法常量“_FILE_”
c、新建一个图像imagecrateformpng()
案例2-2:
<?php
define('_DIR_', dirname(_FILE_).'\\');
//加载已有的图像;
header('Content-Type:image/png');
//imagecreateformpng——从png文件或url中新建一个图像
//用image载入图像,是可以进行编辑的;
//在载入图像中,加入水印
//通过魔法常量_FILE_
//echo dirname(_FIFE_);
$im=imagecreateformpng(_DIR_.'');
$white=imagecolorallocate($im, 255, 255, 255);
imagestring($im, 5, 10, 10, 'http://www.csdn.net/zxy', $white);
imagepng($im);
imagedestroy($im);
?>
(3)加载已有的系统字体
a、设置字体iconv();
b、采用系统字体文件并设置其样式,即imagettftext()
案例2-3:
<?php
define('_DIR_', dirname(_FILE_).'\\');
//加载已有的图像;
header('Content-Type:image/png');
//从PNG文件或url新建一个图像;
$im=imagecreateformpng(_DIR_.'m.png');
$white=imagecolorallocate($im, 255, 255, 255);
//字体文件;
$text=iconv('gbk','utf-8','陆海华');
//font字体必须支持中文;
$font='C:\author\s';
//采用系统提供的字体
//第二个参数为字体的大小,第三个参数为旋转的角度,第四五个参数为x、y值;
imagettftext($im, 40, 30, 50, 100, $white, $font, 'hello');
imagepng($im);
imagedestroy($im);
?>
(4)缩略图
所谓的缩略图,即不仅表面的大小改变了,且其容量也改变了。
a、getimagesize()表示取得图像的大小
b、list()函数表示取得原图的长度和高度
c、imagecreateformjpeg()将原图复制到新图上
d、imagecopyresampled()表示将原图重新采样,复制到新图上去。
案例2-4:缩略图
<?php
//微缩图,不但表面的大小改变了,其次容量也改变了;
//是真的改变了,而不是表面的缩小;
define('_DIR_', dirname(__FILE__).'\\');
//header('Content-Type:image/png');
header('Content-Type:image/jpeg');
//getimagesize——取得图像的大小;
//获得原图的长度和高度——list();
//list($width,$height)=getimagesize(_DIR_.'m.png');
list($width,$height)=getimagesize(_DIR_.'m.jpg');
//将原图缩放成40%;
$_width=$width*0.4;
$_height=$heught*0.4;
//创建一个新图;
$im=imagecreatetruecolor($_width, $_height);
//下面的工作是,载入新图,将原图复制到新图上去;
//载入原图;
//1.png
//$_im=imagecreatefrompng(_DIR_.'m.png');
//2.jpeg
$_im=imagecreatefromjpeg(_DIR_.'m.jpg');
//将原图重新采样,拷贝到原图上去,
//imagecopyresampled——重新采样拷贝部分图像并调整大小;
imagecopyresampled($im, $_im, 0, 0, 0, 0, $_width, $_height, $width, $height);
//将新图输出;
//1.imagepng(),全部为高清图片。
//imagepng($im);
//2.imagejpeg()第二个参数不需要,直接null过度,第三个参数是0-100来调节jpg的清晰度。
imagejpeg($im,null,100);
//销毁;
imagedestroy($im);
imagedestroy($_im);
?>
解析——png、jpeg区别
(1)png表示“.php”文件,且全部高清
(2)jpeg表示的图像文件有清晰度可言