在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:WindowsFontsmsyh.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。