GD库处理图像

时间:2021-03-16 15:17:23

在PHP5中,动态图象的处理要比以前容易得多。PHP5在php.ini文件中包含了GD扩展包,只需去掉GD扩展包的相应注释就可以正常使用了。PHP5包含的GD库正是升级的GD2库,其中包含支持真彩图像处理的一些有用的JPG功能。

一般生成的图形,通过PHP的文档格式存放,但可以通过HTML的图片插入方式SRC来直接获取动态图形。比如,验证码、水印、微缩图等。

一.创建图像

创建图像的一般流程:

1).设定标头,告诉浏览器你要生成的MIME类型。

2).创建一个图像区域,以后的操作都将基于此图像区域。

3).在空白图像区域绘制填充背景。

4).在背景上绘制图形轮廓输入文本。

5).输出最终图形。

6).清除所有资源。

7).其他页面调用图像。

  //1 设定标头
//header("Content-type:text/html;charset=utf-8"); //不写就是默认,默认的是html文档
header("Content-type:image/png;"); //2 创建一个图形区域,图像背景
//两种方式
$im = imagecreatetruecolor(200, 200); //返回的是资源句柄 //3 在空白图像区域绘制填充背景
//填充颜色换掉,首相要有个颜色填充器
$blue = imagecolorallocate($im, 0, 102, 255);
//将颜色填充到背景上去,imagefill();
imagefill($im, 0, 0, $blue); //4 在背景上绘制图形轮廓输入文本
$white = imagecolorallocate($im, 255, 255, 255);
//画一条线imageline();
imageline($im, 0, 0, 200, 200, $white);
imageline($im, 0, 200, 200, 0, $white);
//绘制文本imagestring();二号字体,x y位置,文本,颜色
imagestring($im, 5, 70, 20, 'Mr.dang', $white); //5 输出最终图形
imagepng($im); //输出png格式图片 //6 清空资源
imagedestroy($im);

7).其他页面调用图像:只需要在另一个php文件调用即可,输出img标签,src写上边创建的图像的文件地址

  //demo2.php
echo '<img src="demo.php" alt="图形" title="图形" />';

二.简单小案例

1 验证码

/*简单验证码案例  */

  //1 获取四位数字字母混编
//mt_rand();获取随机数
//dechex();十进制转换为十六进制
for($i=0;$i<4;++$i){
$nmsg .= dechex(mt_rand(0, 15));
} //2 将上边的变成图片
header('Content-type:image/png');
$im = imagecreatetruecolor(75, 25);
$blue = imagecolorallocate($im, 0, 102, 255);
$white = imagecolorallocate($im, 255,255,255);
imagefill($im, 0, 0, $blue);
imagestring($im, 5, 20, 5, $nmsg, $white);
imagepng($im);
imagedestroy($im);

2 加载已有图像:这个图像事先防止于和php文件同一目录下,可以用相对或绝对地址调用,建议用绝对因为更快,我们的示例中用的是绝对,用魔法常量赖实现的

/*加载已有图像  */
// //
// define('URL', dirname(__FILE__).'\\');
// header('Content-type:image/png');
// $im = imagecreatefrompng(URL.'2.png');
// $white = imagecolorallocate($im, 255, 255, 255);
// imagestring($im, 5, 10, 10, 'http://www.dang.com', $white);
// imagepng($im);
// imagedestroy($im);

3 采用本机系统中的字体

/*采用系统提供字体  */
// $font = 'C:\Windows\Fonts\msyh.ttc'; //把路径传进去即可
// define('URL', dirname(__FILE__).'\\'); // header('Content-type:image/png');
// $im = imagecreatefrompng(URL.'2.png');
// $white = imagecolorallocate($im, 255, 255, 1);
// imagettftext($im,40,10,50,100,$white,$font,'hello,党兴明'); //第一个数字字体大小,第二个旋转角度
// imagepng($im);
// imagedestroy($im);

4 微缩图

/*微缩图问题  */
define('URL', dirname(__FILE__).'\\');
header('Content-type:image/png');
//1 取得图像大小
list($width,$height) = (getimagesize(URL.'2.png')); //返回的是数组,里边包含尺寸
//2 将原图的宽高缩小百分比
$_width = $width*0.4;
$_height = $height*0.4; //3 创建一个新图
$im = imagecreatetruecolor($_width, $_height); //4 载入原图,将原图复制到新图上去
//载入
$_im = imagecreatefrompng(URL.'2.png');
//将原图重新采样,拷贝到新图上,最后按0.4的比例输出
//imagecopyresampled();重新采样拷贝图片并调整大小
imagecopyresampled($im, $_im, 0, 0, 0, 0, $_width, $_height, $width, $height); //5 输出销毁
imagepng($im);
imagedestroy($im);
imagedestroy($_im);

注意:以上示例中都用的png格式的图片,可以用其他格式的(只要把函数中的png替换就好)。但jpg在函数中要写jpeg,bmp要写wbmp。