在之前的文章中给大家带来了《PHP如何上传文件?看完就明白了!》,其中详细的给大家介绍了在PHP中应该怎样上传文件,本篇文章来一起看一看PHP中图像处理的相关知识,希望对大家有帮助!
图像处理是PHP工作中常遇到的事情,我们遇到需要处理图像的场景有很多,例如图像验证码、图片水印等等场景。其实学习图像处理的重点实际是学习PHP中GD系统的函数,PHP的图像处理需要GD库的支持,那接下来我们首先来看一下关于GD库的相关知识吧。
GD库
GD库可以理解为一个用于创建图形图像的函数库,GD库实际是由C语言编写的,可以用于PHP中,除了PHP外还可以在Perl等多种语言中使用,GD 库中提供了很多用来处理图片的接口,
PHP 中使用 GD 库可以在页面中绘制各种图形图像,统计图,还有图像验证码也可以使用GD库来实现。
示例如下:
<?php phpinfo(); ?>
当输入之后,在输出结果中,如果出现如下所示的两个选项,则表示当前的机器支持通过GD来处理图像:
或者可以使用:
<?php print_r(gd_info()); ?>
输入之后运行,若输出结果如下图所示,也表示当前机器支持通过GD来处理图像。
那如果没有安装好的话,也可以通过在 Windows 系统下只需将 php.ini 配置文件中“extension=php_gd2.dll”一项前面的注释删除的方法完成。
在 PHP 中,通过 GD 库处理图像的操作一般分为 4 个基本步骤:
-
创建画布
-
绘制图像
-
输出图像
-
释放资源
通过这四步我们就完成了对图像的基本操作了,你接下来我们一起来看一下应该怎么操作吧。
创建画布
我们所有的绘图和图像处理都需要在一个背景图片上面完成,也就是画布,可以理解为为图像我们在内存中有一片临时的区域作为画布,用来储存图像的信息,以后的图像操作都会在这片区域也就是画布上进行。
imagecreate()
和 imagecreatetruecolor()
用来创建画布,它们的语法格式如下:
imagecreate(int $width, int $height) imagecreatetruecolor(int $width, int $height)
其中,$width 表示创建画布的宽度也可以理解为图像的宽度,$height 表示创建画布的高度也就是图像的高度
这两个函数都可以用来创建画布,不过其中不同的是,他们可以容纳的色彩范围不同。
示例如下:
<?php $img = @imagecreatetruecolor(120, 20) or die('画布创建失败!'); ?>
由于只是创建了一个画布上面并没有东西,浏览器也不会输出画布,但是可以通过 imagesx() 和 imagesy() 来获取图像的宽和高:
<?php $img = @imagecreatetruecolor(120, 20) or die('画布创建失败!'); echo '画布的宽度为:'.imagesx($img).'像素'; echo '<br>画布的高度为:'.imagesy($img).'像素'; ?>
输出结果:
由此我们便完成了创建一个画布。
除了使用上面两个函数创建画布之外,还可以通过以下方式,通过文件或者url创建图像:
-
imagecreatefromgif()
: 通过 GIF 文件或者 URL 新建一个图像 -
imagecreatefromjpeg()
: 通过 JPEG 文件或者 UR 新建一个图像 -
imagecreatefrompng()
: 通过 PNG 文件或者 UR L新建一个图像 -
imagecreatefromwbmp()
: 通过 WBMP 文件或者URL,新建一个图像
输出图片
上述示例中,我们已经成功的创建了画布,在PHP中不同格式的图像也需要不同的函数来进行输出,不同的函数如下所示:
-
imagegif()
: 输出一个GIF格式图像到浏览器或文件 -
imagejpeg()
: 输出一个JPEG格式图像到浏览器或文件 -
imagepng()
:输出一个PNG格式图像到浏览器或文件
它们的语法格式如下:
imagegif(resource $image[, string $filename]) imagejpeg(resource $image[, string $filename[, int $quality]]) imagepng(resource $image[, string $filename])
其中,$image为创建的一个图像资源;$filename表示为参数,用来设置文件需要保存的路径。
示例如下:
首先我在根目录中已经保存了一个名为php.png的图像文件
<?php header('Content-type:image/jpeg'); $image= imagecreatefrompng('php.png'); imagepng($image); ?>
输出结果:
通过imagecreatefrompng()函数和imagepng()成功的输出了一个格式为png的图片。
释放图像资源
通过上述示例已经成功的输出了图片,在图片的资源使用完成后,通常需要释放图像处理时所占用的内存,那应该怎样操作呢?
在PHP中我们通过imagedestroy() 函数来释放图像资源,语法格式如下:
imagedestroy(resource $image)
其中$image表示需要释放资源的图像
示例如下:
<?php header('Content-type:image/jpeg'); $image= imagecreatefrompng('php.png'); imagepng($image); imagedestroy($image); ?>
因为释放图像资源的操作是没有输出内容的,所以就不列出输出结果了。
推荐学习:《PHP视频教程》