在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。

GD库处理图像的更多相关文章

  1. PHP->利用GD库新建图像

    1.确认php中GD库是否开启 在PHP配置文件php.ini中查找extension=php_gd2.dll,去掉前边的(分号) ';' 即可,一般php是默认开启的 2.绘画步骤 创建一个画布(画 ...

  2. PHP 使用GD 库绘制图像,无法显示的问题

    根据官方GD 库绘制图像文档样式 原基本样式 $width = 120; $height = 50; $img = @imagecreatetruecolor($width, $height) or ...

  3. 【PHP】使用GD库实现 图像生成、缩放、logo水印和简单验证码

    gd库是php最常用的图片处理库之一(另外一个是imagemagick),可以生成图片.验证码.水印.缩略图等等.要使用gd库首先需要开启gd库扩展, windows系统下需要在php.ini中将ex ...

  4. php GD库简单使用和封装

    GD库创建图像步骤 <?php //1.创建画布 $width = 300; $height= 200; $image=imagecreatetruecolor($width,$height); ...

  5. 自动检测GD库支持的图像类型

    以下代码通过自动检测GD库支持的图像类型 来写出移直性更好的PHP代码 <?php if(function_exists("imagegif")){ header(" ...

  6. GD库的基本信息,图像的旋转、水印、缩略图、验证码,以及图像类的封装

    GD库检测 <?php phpinfo(); ?> GD库安装• Windows 使用phpstudy • Linux 编译安装 –with-gd• Linux 编译安装扩展 GD库支持的 ...

  7. PHP的GD库

    GD库 PHP通过GD库,可以对JPG.PNG.GIF.SWF等图片进行处理.GD库常用在图片加水印,验证码生成等方面. 绘制线条 要对图形进行操作,首先要新建一个画布,通过imagecreatetr ...

  8. gd库

    1.开启GD库扩展 去掉注释: extension=php_gd2.dll extension_dir='ext目录所在位置' 2.检测GD库是否开启 phpinfo(); //检测扩展是够开启 ex ...

  9. 烂泥:centos单独编译安装gd库

    本文由秀依林枫提供友情赞助,首发于烂泥行天下. 这几天一直在弄一个商城系统,该系统的源码及数据库都已经上传并创建完毕.但是在安装该系统时,却提示缺少gd库.如下: 使用php探针查看,发现php确实没 ...

随机推荐

  1. Java中getResourceAsStream的用法

    首先,Java中的getResourceAsStream有以下几种: 1. Class.getResourceAsStream(String path) : path 不以'/'开头时默认是从此类所在 ...

  2. linux终端常用快捷键

    Ctrl + d       删除一个字符,相当于通常的Delete键(命令行若无任何字符,则相当于exit:处理多行标准输入时也表示EOF ) Ctrl + h       退格删除一个字符,相当于 ...

  3. git-添加公钥

    安装完git后,打开开git bush 输入以下命令 git config --global user.name "Your Name" git config --global u ...

  4. 解决:error: Cannot fetch repo (TypeError: expected string or buffer)

    同步源码,问题重现: Fetching project platform/external/libopus Fetching project repo error: Cannot fetch repo ...

  5. js-JavaScript高级程序设计学习笔记20

    第二十三章 离线应用与客户端存储 1.离线检测 HTML5定义navigator.onLine属性.还定义了两个事件,online和offline,当网络从离线变为在线或从在线变为离线时在window ...

  6. RabbitMQ 参数们的Power “续”

    参数中的 arguments 之前讲参数的一些作用的时候,忽略了最后一个字典类型的参数,因为这个参数是大有文章的,值得单独进出来说道说道. 这时,就不得不打开我们的 Web UI管理系统了,可以看到在 ...

  7. 基于Twitter-Snowflake的java改进版,去状态化实现

    package jeffery; import java.net.InetAddress; import java.net.UnknownHostException; import java.util ...

  8. 运维请注意:”非常危险“的Linux命令大全

    Linux命令是一种很有趣且有用的东西,但在你不知道会带来什么后果的时候,它又会显得非常危险.所以,在输入某些命令前,请多多检查再敲回车. rm –rf rm –rf是删除文件夹和里面附带内容的一种最 ...

  9. 发起post、get请求

    HttpURLConnection对象 /*** * 发起post请求,传输xml数据 * @param strUrl 请求地址 * @param xml 发送数据 * @return string ...

  10. 通过grep来进行日志分析,grep -C和配合awk实际对catalina.out使用案例

    本文介绍通过grep来进行日志分析,主要介绍grep -C和配合awk实际对catalina.out使用案例 grep可以对日志文件进行筛选,统计,查询,快速定位bug. 首先,你的日志需要比较规范, ...