首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

PHP 图形图像处理

1.GD2

1.1 GD2 是什么?

PHP 除了可以处理文本数据外,通过一个叫 的 PHP 扩展库,PHP 还可以动态生成不同格式图像或者对已有图片进行加工处理。

库(也可以称为 GD2 函数库)是一个开源的用于创建图形图像的函数库,该函数库由 C 语言编写,可以在 Perl,PHP 等多种语言中使用。 库中提供了一系列用来处理图片的 API(接口),使用 GD 库可以处理图片、生成图片,也可以给图片加水印等。

1.2 使用 GD2 库可以做什么

在 PHP 中使用 GD 库可以在页面中绘制各种图形图像,以及统计图,如果与 Ajax 技术相结合还可以制作出各种强大的动态图表。还有就是在网站登陆页面中使用的验证码,也可以使用 GD 库来实现。

1.3 GD2 库加载

不同版本的 PHP,它们配置文件中关于 GD 库的配置项也能有所不同,比如在 php7.2 及之后的版本中 GD 库的配置项就变成了“extension=gd2”

有以下几种方式可以确认

(1)php.ini

(2)

(3) gd_info()函数

2.常用图像处理

在 PHP 中,通过 GD 库处理图像的操作,都是处理,操作完成以后再以的方式,输出到或保存在的磁盘中。创建图像一般分为 4 个基本步骤。

创建画布:所有的绘图设计都需要在一个上完成,而,用于存储图像的信息。以后的图像操作都将基于这个背景画布,该画布的管理就类似于我们在画画时使用的画布。

绘制图像:画布创建完成以后,就可以通过这个画布资源,使用各种画像函数设置图像的颜色、填充画布、画点、线段、各种几何图形,以及向图像中添加文本等。

输出图像:完成整个图像的绘制以后,需要将图像以某种格式保存到服务器指定的文件中,或将图像直接输出到浏览器上显示给用户。在图像输出之前,一定要使用 header() 函数发送 Content-type 通知浏览器,这次发送的是图片不是文本。

释放资源:图像被输出以后,画布中的内容也不再有用。出于节约系统资源的考虑,需要及时清除画布占用的所有内存资源。

2.1 创建画布

通常使用 和 来创建指定的画布,它们的语法格式如下所示:

该函数新建一个基于的图像,imagecreate() 返回一个图像标识符,代表了一幅大小为 x_size 和 y_size 的。

该函数新建一个真彩色图像, 返回一个图像标识符,代表了一幅大小为 和 的。

以上两个函数都可以创建一张画布,而且成功后都会返回一个资源句柄,失败则返回 FALSE。不同的是它们可以容纳的色彩范围不同,imagecreate() 创建一个基于普通调色板的图像,通常支持色;而 imagecreatetruecolor() 可以创建一个图像。

由于没有在画布上执行任何操作,所以浏览器不会输出画布。但是可以通过 和 来获取图像的宽和高(单位是像素)

除了使用上面两个函数可以创建画布外,还可以使用下表中的函数,通过文件或 URL 创建一个新图像。

2.2 定义颜色

在使用 PHP 动态输出漂亮图像的同时,也离不开颜色的设置,就像画画时需要使用调色板一样。在 PHP 中提供了 imagecolorallocate() 和 imagecolorallocatealpha() 两个函数来设置图像的颜色

(1)imagecolorallocate() 函数

该函数可以为一个图像资源分配颜色,如果在图像中需要设置多种颜色,只要多次调用该函数即可。

提示:如果是使用 imagecreate() 函数创建的图像资源,在第一次调用 imagecolorallocate() 函数时会默认为其填充背景色。

(2)imagecolorallocatealpha() 函数

该函数的作用和 imagecolorallocate() 相同,但多了一个额外的设置透明度的参数 alpha。

其中 ,其值从 到 。 表示完全不透明, 表示完全透明。

2.3 绘制文字

想要在图像中显示文字也需要画上去。在 PHP 中不仅支持多种的字体库,还提供了非常灵活的文字绘制方法。例如,在图像中绘制缩放、倾斜、旋转的文字等。常用的绘制文字的函数如下表所示:

2.4 输出图片

前面讲解的画布创建,并不能看到画布中的图像是什么样子的,那么接下来就来看看要怎么查看我们创建的图像。在 PHP 中可以使用不同的函数输出不同格式的图像,如下表所示是常用的图像输出函数。

2.5 释放图像资源

在图像的所有资源使用完毕后,通常需要释放图像处理所占用的内存。在 PHP 中可以通过 imagedestroy() 函数来释放图像资源,其语法格式如下所示:

3 应用案例

3.1 生成验证码

具体的实现步骤如下所示:

创建画布;

随机绘制字符;

绘制干扰元素;

输出图像到浏览器;

释放资源。

代码示例:

3.2 为图片添加水印

将 src_im 图像中坐标从 src_x,src_y 开始,宽度为 src_w,高度为 src_h 的一部分拷贝到 dst_im 图像中坐标为 dst_x 和 dst_y 的位置上。

4.JpGraph

应用 GD 函数库可以创建各式各样的图形,但是想要制作复杂的统计图形,仅通过 GD 函数来实则会显得非常繁琐,PHP 从诞生到走向成熟的过程中经过多次变革,在这期间,许多组织和机构都开发了基于 PHP 的框架和类库。JpGraph 图形类库就是其中非常实用、流行的代表,不仅功能强大,而且操作简便。

4.1 JpGraph 类简介

JpGraph 是一个完全使用 PHP 编写的,基于 GD2 函数库的用于创建统计图的类库。JpGraph 在绘制统计图方面不仅功能非常强大,而且使用方便,只需简单的几行代码就可以绘制出非常复杂的统计图效果,从而在很大程度上提高了编程人员的开发效率。

使用 JpGraph 可以根据需要绘制任意图形。我们只需要提供相关数据、标题以及表格类型,然后把剩下的事交给 JpGraph 就行。只需掌握为数不多的 JpGraph 内置函数,就可以制作出非常漂亮的图表。

4.2 JpGraph 类安装

需要从官方网站 https://jpgraph.net/download/ 下载 JpGraph。这里我们下载的是 JpGraph 4.3.1 版本,需要注意的是 JpGraph 4.x 系列支持 PHP5(PHP 5.1.0 或更高版本)和 PHP 7(PHP 7.0、7.1 和 7.2)。在下载 JpGraph 时注意选择合适的版本进行下载。

JpGraph 需要 GD 库的支持,如果我们想在当前站点中使用 JpGraph 类库的话,只需要将下载下来的 JpGraph 压缩包中的 src 目录复制到当前站点所在目录中,使用时只需要调用 src 目录下的指定文件即可。

如果想要在服务器上的所有站点中使用 JpGraph,可以执行如下步骤来安装 JpGraph 类库:

将压缩包下的全部文件解压到一个文件夹中,例如“D:\www”;

打开 PHP 的安装目录,找到并打开 php.ini 文件,然后修改其中的 include_path 参数,在其后增加上一步解压出来的文件夹名,例如“include_path = ".;D:\www"”;

重新启动 Apache 服务器即可生效

4.3 JpGraph 配置

JpGraph 提供了几个专门用于配置 JpGraph 类库的文件,例如 jpg-config.inc.php、jpgraph_ttf.inc.php 等等,在使用 JpGraph 前,可以通过修改文本文件来完成 JpGraph 的配置。

中文字体配置

JpGraph 支持的中文标准字体可以通过修改 CHINESE_TTF_FONT 的设置来完成,可以在配置文件 jpgraph_ttf.inc.php 中找到该配置项。

默认图片格式配置

根据当前 PHP 环境中支持的图片格式来设置默认的生成图片的格式。JpGraph 默认图片格式的配置可以通过修改配置文件 jpg-config.inc.php 中的 DEFAULT_GFORMAT 项来完成。默认值 auto 表示 JpGraph 将依次按照 PNG、GIF 和 JPEG 的顺序来检索系统支持的图片格式。

4.4 使用 JpGraph 创建图像

在介绍完 JpGraph 的安装配置之后,就可以使用 JpGraph 来创建图像了。为了更好的使用 JpGraph,首先我们来了解一下使用 JpGraph 编写生成图像的代码时通常需要哪些步骤。

1) 包含所需要的类库文件

首先我们需要使用 require_once() 或者 include_once() 等函数将我们需要使用的类库文件引入到当前的代码中。例如:

2) 初始化数据

引入需要的文件后,接下来就可以初始化图表中需要的数据了,如下所示:

这些数据可以是 PHP 程序中固定的数据;也可以是存储在数据库或者文本文件中的数据;还可以是通过 URL 参数传递的数据。

3) 创建 Graph 类实例

有了所需的数据,接下来就需要来创建 Graph 类的实例了,我们可以通过创建实例的过程来设置生成图像的尺寸,如下所示:

4) 设置标题及其字体、颜色、位置

JpGraph 中提供了很多可以设置的参数,以便我们可以制作成多种多样的图像,例如下面这些:

5) 创建对应的图像实例

设置好图标的各个参数后,就可以创建指定图标的实例了,可以是折线图、柱形图、饼状图,3D 饼状图等,如下所示:

6) 将数据添加到图像上

7) 显示图像

至此一个简单的图形就完成了。

注意:

JpGraph 会默认将汉字编码认定为 GB2312,并将之转化为 UTF-8 格式后再显示。所以如果文件的编码格式为 GB2312,只需将 SetFont() 方法的第一个参数设置为 FF_SIMSUN 即可,如果是 UTF-8 编码,则需要把汉字编码转化为 GB2312,这样汉字才能正常显示,转换编码方式可以使用

4.5 应用案例

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20230202A00ME100?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券