PHP编实现程动态图像的创建代码


Posted in PHP onSeptember 28, 2008

在使用基本的图像创建函数之前,需要安装GD库文件。如果要使用与JPEG有关的图像创建函数,还需要安装jpeg-6b,如果要在图像中使用Type 1型字体,则必须安装t1lib。

在建立图像创建环境之前,还需要做一些准备工作。首先,安装t1lib接着安装jpeg-6b,然后再安装GD库文件。在安装时一定要按这里给定的顺序进行安装,因为在编译GD入库时会用到jpeg-6b,如果没有安装jpeg-6b,在编译时就会出错。

在安装完这三个组件后,还需要重新配置一次PHP,这也是你对采用DSO方式安装PHP感到庆幸的地方之一。运行make clean,然后在当前的配置中添加下面的内容:

--with-gd=[/path/to/gd]

--with-jpeg-dir=[/path/to/jpeg-6b]

--with-t1lib=[/path/to/t1lib]

完成添加后执行make命令,然后再执行make install命令,重新启动Apache后运行phpinfo()来检查一下新的设置是否生效了。现在,我们就可以开始图像创建工作了。

根据所安装的GD库文件的版本将决定你是否能创建GIF或PNG格式的图形文件。如果安装的是gd-1.6或以前的版本,可以使用GIF格式的文件但不能创建PNG格式,如果安装的是gd-1.6以后的版本,可以创建PNG文件但不能创建GIF格式的文件。

创建一幅简单的图像也需要用到许多的函数,我们将一步一步地进行说明。

在下面的例子中,我们将创建一个PNG格式的图像文件,下面的代码是一个包含所创建的图像的MIME类型的头部:

<? header ("Content-type: image/png");

使用ImageCreate()创建一个代表空白图像的变量,这个函数要求以像素为单位的图像大小的参数,其格式是ImageCreate(x_size, y_size)。如果要创建一个大小为250×250的图像,就可以使用下面的语句:

$newImg = ImageCreate(250,250);

由于图像还是空白的,因此你可能会希望用一些彩色来填充它。你需要首先使用ImageColorAllocate()函数用其RGB值为这种颜色指定一个名字,这一函数的格式为ImageColorAllocate([image], [red], [green], [blue])。如果要定义天蓝色,可以使用如下的语句:

$skyblue = ImageColorAllocate($newImg,136,193,255);

接下来,需要使用ImageFill()函数用这种颜色填充这个图像,ImageFill()函数有几个版本,例如ImageFillRectangle()、ImageFillPolygon()等。为简单起见,我们通过如下的格式使用ImageFill()函数:

ImageFill([image], [start x point], [start y point], [color])

ImageFill($newImg,0,0,$skyblue);

最后,在图像建立后释放图像句柄和所占用的内存:

ImagePNG($newImg);

ImageDestroy($newImg); ?>

这样,创建图像的全部代码如下所示:

<? header ("Content-type: image/png");

$newImg = ImageCreate(250,250);

$skyblue = ImageColorAllocate($newImg,136,193,255);

ImageFill($newImg,0,0,$skyblue);

ImagePNG($newImg);

ImageDestroy($newImg);

?>

如果把这个脚本文件保存为skyblue.php,并用浏览器访问它,我们会看到一个天蓝色的250×250的PNG格式的图像。

我们还可以使用图像创建函数对图像进行处理,例如把一个较大图像作成一个小图像:

假设你有一幅图像,想从中裁剪出一个35×35大小的图像。你所需要作的是创建一个35×35大小的空白图像,创建一个包含原来图像的图像流,然后把一个经过调整大小的原来的图像放到新的空白图像中。

要完成这一任务的关键函数是ImageCopyResized(),它要求的格式如下所示:ImageCopyResized([new image handle],[original image handle],[new image X], [new Image Y], [original image X], [original image Y], [new image X], [new image Y], [original image X], [original image Y])。

<? /*发送一个头部,以便让浏览器知道该文件所包含的内容类型*/

header("Content-type: image/png");

/*建立保存新图像高度和宽度的变量*/

$newWidth = 35;

$newHeight = 35;

/*建立给定高度和宽度的新的空白图像*/

$newImg = ImageCreate($newWidth,$newHeight);

/*从原来较大的图像中得到数据*/

$origImg = ImageCreateFromPNG("test.png");

/*拷贝调整大小后的图像,使用ImageSX()、ImageSY()得到原来的图像在X、Y方面上的大小*/

ImageCopyResized($newImg,$origImg,0,0,0,0,$newWidth,$newHeight,ImageSX($origImg),ImageSY($origImg));

/*创建希望得到的图像,释放内存*/

ImagePNG($newImg);

ImageDestroy($newImg); ?>

如果把这一小段脚本保存为resized.php,然后用浏览器对它进行访问,就会看到一个35×35大小的PNG格式的图像。

PHP 相关文章推荐
PHP中的正规表达式(二)
Oct 09 PHP
攻克CakePHP系列三 表单数据增删改
Oct 22 PHP
php5.3 goto函数介绍和示例
Mar 21 PHP
php采用ajax数据提交post与post常见方法总结
Nov 10 PHP
10个php函数实用却不常见
Oct 13 PHP
PHP截取IE浏览器并缩小原图的方法
Mar 04 PHP
PHP5.5迭代生成器用法实例详解
Mar 16 PHP
配置Nginx+PHP的正确思路与过程
May 10 PHP
深入剖析PHP中printf()函数格式化使用
May 23 PHP
php监测数据是否成功插入到Mysql数据库的方法
Nov 25 PHP
php+redis实现多台服务器内网存储session并读取示例
Jan 12 PHP
Thinkphp5+uploadify实现的文件上传功能示例
May 26 PHP
php 三维饼图的实现代码
Sep 28 #PHP
PHP控制网页过期时间的代码
Sep 28 #PHP
PHP集成FCK的函数代码
Sep 27 #PHP
php横向重复区域显示二法
Sep 25 #PHP
php下防止单引号,双引号在接受页面转义的设置方法
Sep 25 #PHP
PHP伪造referer实例代码
Sep 20 #PHP
PHP面向对象分析设计的经验原则
Sep 20 #PHP
You might like
php文件上传类完整实例
2016/05/14 PHP
thinkphp自带验证码全面解析
2016/09/18 PHP
基于PHPexecl类生成复杂的报表表头示例
2016/10/14 PHP
IE6下JS动态设置图片src地址问题
2010/01/08 Javascript
JavaScript 构造函数 面相对象学习必备知识
2010/06/09 Javascript
js indexOf()定义和用法
2012/10/21 Javascript
重写document.write实现无阻塞加载js广告(补充)
2014/12/12 Javascript
使用jQuery获得内容以及内容的属性
2015/02/26 Javascript
关注jquery技巧提高jquery技能(前端开发必学)
2015/11/02 Javascript
html+js+highcharts绘制圆饼图表的简单实例
2016/08/04 Javascript
jQuery实现定位滚动条位置
2016/08/05 Javascript
ajax 提交数据到后台jsp页面及页面跳转问题
2017/01/19 Javascript
nodejs发送http请求时遇到404长时间未响应的解决方法
2017/12/10 NodeJs
基于vue cli重构多页面脚手架过程详解
2018/01/23 Javascript
Webpack path与publicPath的区别详解
2018/05/03 Javascript
easyUI使用分页过滤器对数据进行分页操作实例分析
2020/06/01 Javascript
vue项目,代码提交至码云,iconfont的用法说明
2020/07/30 Javascript
Vue中使用JsonView来展示Json树的实例代码
2020/11/16 Javascript
[02:08]2014DOTA2国际邀请赛 430专访:力争取得小组前二
2014/07/11 DOTA
[10:14]2018DOTA2国际邀请赛寻真——paiN Gaming不仅为自己而战
2018/08/14 DOTA
python输出指定月份日历的方法
2015/04/23 Python
在Python中使用__slots__方法的详细教程
2015/04/28 Python
使用Python对SQLite数据库操作
2017/04/06 Python
Python实现爬取需要登录的网站完整示例
2017/08/19 Python
Python 判断 有向图 是否有环的实例讲解
2018/02/01 Python
matplotlib 输出保存指定尺寸的图片方法
2018/05/24 Python
python hough变换检测直线的实现方法
2019/07/12 Python
Python爬虫实现自动登录、签到功能的代码
2020/08/20 Python
欧洲顶级体育电子商务网站:SportsShoes.com
2018/03/27 全球购物
英国和爱尔兰最大的地毯零售商:Kukoon
2018/12/17 全球购物
Linux开机引导的步骤是什么
2015/10/19 面试题
2015年销售部工作总结范文
2015/04/27 职场文书
初中班级口号霸气押韵
2015/12/24 职场文书
巾帼建功标兵先进事迹材料
2016/02/29 职场文书
MySQL 用 limit 为什么会影响性能
2021/09/15 MySQL
JavaScript流程控制(分支)
2021/12/06 Javascript