在本文章中继续探讨在PHP中调整图像大小和操作方法。
使用卷积矩阵处理图像
图像复制功能
图像的 Base64 编码和解码
在图像中插入水印
在我上一个 GD 教程结束时,您学了如何使用该库自动执行基本任务,例如调整目录中所有图像的大小或在保存最终结果之前对其应用灰度等过滤器。如果您以前从未使用过 PHP GD 库,我建议您在阅读这篇文章之前先阅读那篇 GD 介绍性文章。
1、使用卷积矩阵处理图像
在边缘检测中,
颜色的急剧变化意味着,
我们已经到达图像中某个对象的边缘。
如下图中从白色突然变为棕色将表示杯子和桌子的边界。
指定这种过滤器的一种简单方法,
是使用所谓的“卷积矩阵”。
GD 提供了imageconvolution( $image, $matrix,
$div, $offset)
将 3x3 卷积矩阵应用于图像资源的功能$image
。
该$matrix
参数是一个由三个数组组成的数组,
每个数组包含三个浮点值——即它是一个 3x3 矩阵。
第一个数组的第一个元素乘以左上角像素的颜色值。
类似地,
第一个数组的第二个元素乘以直接位于中心像素顶部的像素的颜色值。
像素的最终颜色,
是通过将所有这些乘法的结果相加,
然后除以$div
进行归一化而获得的。
归一化,通常将最终颜色值保持在 255 以下。
正如我们所见,
该$div
参数被用作卷积结果的除数以对其值进行归一化。
$offset
另一方面,
该参数用于指定所有颜色的偏移值。
您将在下面的示例中看到它如何影响最终结果。
1-1、卷积示例
这是我们应用于桌子上杯子图像的一些不同卷积矩阵的列表。
下图显示了所有这些卷积矩阵的结果。
1-2、图像复制功能
1-3、透明复印
1-4、图像复制示例
上面的代码示例使用了与上一个示例类似的策略,但是这次我们将图像划分为更小的条纹,这些条纹根据变量的值变为灰度或保持不变$i
。完成所有复制合并操作后,我们在图像上应用两个滤镜以使条纹突出。
下图显示了这两个函数结合不同图像过滤器的最终结果。
2、图像的 Base64 编码和解码
我们首先在 的帮助下解码 Base64 字符串base64_decode()
以获取原始图像数据流。然后将此流传递给imagecreatefromstring()
函数以取回我们的图像。之后,您可以简单地使用该imagejpeg()
功能将图像保存为 JPEG 文件。3、在图像中嵌入水印或其他信息
imagecreatefromjpeg()
在上面的代码片段中,我们分别为主图像和imagecreatefrompng()
水印创建了两个不同的图像资源。imagesx()
我们使用和imagesy()
函数确定主图像的宽度和高度。最后的想法
以上内容教了咱们如何使用卷积矩阵在 PHP 中处理图像,及除了水印还可以添加其他如拍摄地点、拍摄时间等信息。
- 1-1、卷积示例
- 1-2、图像复制功能
- 1-3、透明复印
- 1-4、图像复制示例
发表评论