在本文中,了解一下什么是 PHP 中的 GD(图形绘制)库。及如何使用此库通过调整大小、裁剪、旋转或过滤图像等处理方法。
文章目录:
1、使用 PHP GD 创建图像
创建新图像
加载图像文件
从字符串创建图像
2、旋转、缩放、裁剪和翻转图像
回转
缩放
裁剪
翻转图像
3、对图像应用滤镜
4、其他有用的图像处理功能
获取图像尺寸
保存图像
5、获取和设置特定像素的颜色
6、调整目录中所有图像的大小
7、对目录中的每个图像应用灰度和对比度过滤器
什么是GD?
设置
如果您在 Windows 上工作,
您可以将php_gd2.dll文件,
作为扩展名包含在php.ini中。
如果您使用的是 XAMPP 之类的东西,
您会在xampp\php\ext目录中,
找到php_gd2.dll文件。
您还可以使用该功能,
检查您的系统上是否安装了 GD 。
如果您滚动浏览结果输出,
您会发现类似于以下内容。
phpinfo();
1、使用 PHP GD 创建图像
使用 PHP 处理图像的第一步,
是将它们作为图像资源加载到内存中。
这可以通过对不同格式,
使用不同的函数来实现。
所有这些函数的名称都非常相似,
因此很容易记住。
1-1、创建新图像
imagecreatetruecolor()
如果您没有要操作的原始图像源,该功能将很有帮助。它接受两个整数参数:宽度和高度。如果一切按计划进行,它将返回一个图像资源。返回的图像资源基本上是具有指定宽度和高度的黑色图像。
1-2、加载图像文件
如果您计划处理,
已存储在某处的图像,
您将受益于使用imagecreatefromjpeg()
、
imagecreatefrompng()
和imagecreatefromgif()
.
这些将使用加载的图像文件中的所有数据,
创建一个图像资源。
这些函数接受一个参数,
该参数以 URL 或文件路径的形式,
指定您正在加载的图像的位置。
1-3、从字符串创建图像
imagecreatefromstring()
GD
库还允许您使用PHP中的函数从字符串创建图像。
请记住,
您必须base64_decode()
在给定字符串上,
使用imagecreatefromstring()
.
该功能可以自动检测图像类型,
是否为 JPG、PNG、GIF 或其他支持的格式。
2、旋转、缩放、裁剪和翻转图像
您可能希望,
对图像资源执行的一些常见操作,
旋转、缩放、裁剪和翻转。
2-1、回转
imagerotate()
您可以使用该函数旋转已在脚本中加载的图像。它将使用图像的中心作为旋转中心以提供的角度旋转图像。角度以浮点值的形式提供,PHP 将其视为旋转的度数。
有时,
旋转后的图像与原始版本相比,
会有不同的尺寸。
这意味着您将在旋转后,
得到一个未覆盖的区域。
函数的第三个参数imagerotate()
,
可用于指定旋转后空白区域的背景颜色。
2-2、缩放
使用 GD 库缩放图像,
非常容易。
您只需将图像资源以及宽度和高度,
传递给imagescale()
函数。
如果省略高度,
GD 会将图像缩放,
到指定的宽度,
同时保留纵横比。
您还可以,
指定缩放图像的模式。
它可以设置为
IMG_NEAREST_NEIGHBOUR
、
IMG_BILINEAR_FIXED
、
IMG_BICUBIC
等。
您需要记住的一件重要事情是,
此函数返回一个新的缩放图像源,
而不是修改原始图像源。
2-3、裁剪
imagecrop()
您可以使用GD中的功能裁剪任何图像资源。第一个参数是原始图像资源,第二个参数是一个关联数组,键x
为 、y
、width
和height
,指定裁剪窗口的位置和尺寸。
上面的蝴蝶图像,
是使用以下代码裁剪的:
$im_php = imagecreatefromjpeg('path/to/image');$size = min(imagesx($im_php), imagesy($im_php));$im_php = imagecrop($im_php, ['x' => $size*0.4, 'y' => 0, 'width' => $size, 'height' => $size]);$im_php = imagescale($im_php, 300);
基本上,我们将最小边的长度存储在$size
变量中。这个变量然后用于定义我们的裁剪矩形的边界。最后,将图像按比例缩小,使其只有 300 像素宽和长。这给了我们一个适当大小的方形图像。
2-4、翻转图像
imageflip()
使用该功能可以水平、垂直或双向翻转图像。它接受您要翻转的图像资源作为第一个参数,翻转模式作为第二个参数。翻转模式可以设置为IMG_FLIP_HORIZONTAL
、IMG_FLIP_VERTICAL
或IMG_FLIP_BOTH
。
上图中左上图为原图。
右上角的图像是使用创建IMG_FLIP_HORIZONTAL
的,
左下角的图像是使用创建IMG_FLIP_VERTICAL
的,
右下角的图像是使用创建的IMG_FLIP_BOTH
。
3、对图像应用滤镜
GD 还有一个非常有用的imagefilter()
功能,它可以在使用以前图像的功能加载的不同图像资源上应用过滤器。此函数可以接受各种参数,具体取决于您应用的过滤器。
对于初学者,请指定要应用的图像资源和过滤器的名称。您可以将其设置为文档中提到的 12 种预定义过滤器类型之一。
IMG_FILTER_NEGATE
:反转图像中的颜色IMG_FILTER_GRAYSCALE
:从图像中删除颜色IMG_FILTER_BRIGHTNESS
:使图像更亮或更暗IMG_FILTER_CONTRAST
:增加图像对比度IMG_FILTER_COLORIZE
:将图像着色为选定的颜色IMG_FILTER_EDGEDETECT
:突出图像的边缘IMG_FILTER_EMBOSS
:类似于边缘检测,但给每个边缘一个凸起的外观IMG_FILTER_GAUSSIAN_BLUR
:使用高斯方法模糊图像IMG_FILTER_SELECTIVE_BLUR
:使用选择性方法模糊图像IMG_FILTER_MEAN_REMOVAL
:创建风格化图像的效果IMG_FILTER_SMOOTH
:平滑图像中的锯齿状边缘IMG_FILTER_PIXELATE
:使图像看起来像素化
一些过滤器,如NEGATE
、GRAYSCALE
,EDGE_DETECT
并且EMBOSS
不需要任何额外的数据。其他过滤器,如BRIGHTNESS
和CONTRAST
,SMOOTH
可以接受一个附加参数,该参数指定最终图像的亮度、对比度或平滑度。该PIXELATE
参数允许您指定两个附加参数:块大小以及像素化模式。最后,COLORIZE
过滤器接受四个参数,这些参数确定红色、绿色和蓝色分量以及 Alpha 通道的
左上角的图片,是原图。
右上角的图像,是使用COLORIZE
滤镜创建的,
左下角的图像,是使用滤镜创建的,
右下角GRAYSCALE
的图像,是使用滤镜创建的BRIGHTNESS
。
4、其他有用的图像处理功能
4-1、获取图像尺寸
imagesx()
,
您可以使用和imagesy()
函数,
确定图像资源的宽度和高度。
另一个调用的函数getimagesize()
也可用于获取图像的宽度和高度及其类型。此函数返回一个数组,其中包含指定图像的宽度、高度和格式的元素。数组的前两个元素描述宽度和高度,第三个元素包含一个指定文件格式的常量:IMAGETYPE_PNG
、IMAGETYPE_GIF
等之一。
4-2、保存图像
对图像进行所有所需的更改后,
您很可能希望将其输出到浏览器,
或将其保存为文件。
无论哪种情况,
您都必须使用 GD 输出函数之一,
如imagejpeg()
、imagepng()
或imagegif()
。
您将图像资源传递给这些输出函数之一,
如果要将图像保存到文件中,
您还需要指定文件名。
您还可以根据图像类型,
使用第三个可选参数,
来控制输出图像的质量。
5、获取和设置特定像素的颜色
PHP 中有多种函数可用于获取或设置图像中特定位置的单个像素的颜色。第一步是创建一个具有诸如imagecreatefrompng()
.
之后,
您可以使用该函数:
imagecolorat($image, $x, $y)
获取给定像素的颜色索引。
像素的位置由函数中的第二个和第三个参数决定。
如果在真彩色图像上调用此函数,
您将获得像素的 RGB 值作为整数。
现在,
您可以使用位移和遮罩,
来获得不同的颜色分量,
或者使用另一个名为:
imagecolorsforindex($image, $color)
.
可以使用该imagesetpixel($image, $x, $y, $color)
功能,
设置任何特定位置的像素颜色。
用PHP替换图像中的颜色
使用我们上面学到的概念,
您可以在 PHP 中轻松地将一种颜色,
替换为另一种颜色。
结果的质量会因图像而异。
作为一般规则,
颜色变化越少意味着更换越好。
使用这种方法可以非常有效地替换纯色。
让我们编写一些代码来替换下图中的颜色。
上面的代码使用上一节中的函数,
来获取和设置颜色值。
你应该注意到,
我们正在做一个精确的颜色匹配。
这可能会导致一些伪影,
因为像素在边界周围的颜色,
可能会略有不同。
imagecolorsforindex()
在进行完全匹配时,
我们还可以避免对函数的调用。
但是,
拥有单独的颜色分量,
可以让您在系统中引入一些容差,
并在某些情况下,
提供更好的结果。
这是具有精确颜色比较和替换的最终图像。
6、调整目录中所有图像的大小
让我们应用我们迄今为止获得的知识来做一些实际的事情。在本节中,我们将调整特定目录中所有 JPEG 图像的大小,使其宽度为 640 像素。高度将根据原始图像的尺寸自动计算。
我们将调整大小的图像,
保存在一个名为Resized的新文件夹中。
在这种情况下,
所有原始图像,
都具有相同的尺寸,
但代码将适用于具有不同尺寸,
和纵横比的图像。
7、对目录中的每个图像应用灰度和对比度过滤器
这一次,我们将对目录中的每个图像应用两个不同的过滤器,并将最终结果保存在不同的目录中,而不对文件名进行任何更改。让我们深入研究代码,稍后我将解释每个函数的作用。
最后的想法
本教程的目的,
是让您熟悉 PHP 中的 GD 库,
并向您展示,
如何使用所有这些函数,
来让您的生活更轻松。
- 设置
- 1-1、创建新图像
- 1-2、加载图像文件
- 1-3、从字符串创建图像
- 2-1、回转
- 2-2、缩放
- 2-3、裁剪
- 2-4、翻转图像
- 4-1、获取图像尺寸
- 4-2、保存图像
发表评论