今天,我们将讨论如何借助 GD 库在 php 中创建缩略图。
当您处理与媒体相关的项目时,您通常需要从原始图像创建缩略图。此外,如果您在您的网站上启用了图片上传,则绝对不要显示用户上传的原始图片。这是因为用户上传的图片可能很大,不会针对网络显示进行优化。相反,您应该始终在图像显示在您的网站上之前调整其大小。
您可以使用不同的工具在 PHP 中调整图像大小,我们将讨论其中最流行的选项之一:GD 库。这是动态创建图像缩略图的最简单方法之一。
先决条件
在本节中,我将介绍我们将在本文后面讨论的示例的先决条件。
首先,您应该确保在您的 PHP 安装中启用了 GD 库。在默认的 PHP 安装中,GD 库应该已经启用。如果您不确定它是否存在,让我们快速检查一下。
使用以下内容创建info.php文件。
<?php phpinfo();
将此文件上传到您网站的文档根目录。接下来,在浏览器中打开https ://your-website-url/info.php URL,它应该会显示 PHP 配置信息,如以下屏幕截图所示。
现在,尝试找到gd扩展部分。如果它已在您的 PHP 安装中安装和配置,您应该能够找到它,如以下屏幕截图所示。
如果你没有找到它,这意味着你的服务器上没有安装 gd。在这种情况下,您只需要安装gd扩展程序,就可以了。如果您想自己安装,请查看我的文章,解释如何在您的服务器上安装特定的 PHP 扩展。您需要对服务器shell具有 root 访问权限才能自己安装它。
安装并启用gd扩展后,就该查看真实示例了,这就是我们将在下一节中讨论的内容。
一个真实的例子
在本节中,我们将通过一个真实示例来演示如何在 PHP 项目中创建图像缩略图。
首先,我们将创建thumbimage.class.php文件,其中包含ThumbImage类并保存创建缩略图的逻辑。接下来,我们将创建example.php文件,该文件演示如何使用ThumbImage该类。
ThumbImage班级_
继续创建带有以下内容的thumbimage.class.php文件。
<?php // thumbimage.class.php class ThumbImage { private $source; public function __construct($sourceImagePath) { $this->source = $sourceImagePath; } public function createThumb($destImagePath, $thumbWidth=100) { $sourceImage = imagecreatefromjpeg($this->source); $orgWidth = imagesx($sourceImage); $orgHeight = imagesy($sourceImage); $thumbHeight = floor($orgHeight * ($thumbWidth / $orgWidth)); $destImage = imagecreatetruecolor($thumbWidth, $thumbHeight); imagecopyresampled($destImage, $sourceImage, 0, 0, 0, 0, $thumbWidth, $thumbHeight, $orgWidth, $orgHeight); imagejpeg($destImage, $destImagePath); imagedestroy($sourceImage); imagedestroy($destImage); } }
让我们createThumb详细了解该方法以了解其工作原理。
该createThumb方法有两个参数:保存缩略图的目标图像路径和用于调整大小的缩略图宽度。缩略图宽度参数是可选的,如果不传递任何值,则默认宽度为 100。
首先,我们使用了该imagecreatefromjpeg函数,该函数根据在构造函数中初始化的源图像路径在内存中创建图像资源。稍后我们实际创建缩略图图像时将使用它。重要的是要注意我们已经使用了该imagecreatefromjpeg函数,因为我们想jpeg在我们的示例中调整图像的大小。如果要调整png、gif或bmp图像的大小,可以分别使用imagecreatefrompng、imagecreatefromgif或imagecreatefromwbmp函数。
接下来,我们使用imagesx和imagesy函数来测量原始图像的宽度和高度。当我们实际调整原始图像的大小时,将使用这些尺寸。
一旦我们获得了原始图像的宽度和高度,我们就可以使用它们来导出缩略图图像的高度。如果您知道如何计算纵横比,那么您应该对此很熟悉。我们使用纵横比根据提供的缩略图宽度计算缩略图高度,以确保生成的图像不失真。这是您在创建缩略图图像时应考虑的最重要因素之一:扭曲的缩略图令人困惑并且看起来不专业。
接下来,我们使用了该imagecopyresampled函数,它实际上完成了创建缩略图图像的繁重工作。它根据提供的参数通过重新采样来复制和调整部分图像的大小,并在内存中生成缩略图。
imagecopyresampled($destImage, $sourceImage, 0, 0, 0, 0, $thumbWidth, $thumbHeight, $orgWidth, $orgHeight);
在imagecopyresampled函数中,最初的两个参数是目标和源图像资源。第三个和第四个参数是目标点的 x 和 y 坐标。第五个和第六个参数是源点的 x 和 y 坐标。接下来的两个参数用于指定将要创建的缩略图图像的宽度和高度。最后两个参数是原始图像的宽度和高度。
最后,它是imagejpeg将内存中的缩略图图像保存到磁盘上所需路径的功能。该$destImage变量保存缩略图图像源,我们已将其保存到$destImagePath变量中初始化的路径中。您需要确保该目录对您的 Web 服务器是可写的,否则缩略图将不会保存在磁盘上。
同样,由于我们要创建 jpeg缩略图,因此我们使用了该imagejpeg功能。如果要创建gif、png或bmp图像,可以使用imagepng、imagegif或imagewbmp函数。
最后但同样重要的是,有必要释放与图像资源相关的内存。我们已经使用该imagedestroy功能来实现这一点。
示例文件
现在让我们看看如何使用ThumbImage该类来创建缩略图。继续并使用以下内容创建example.php文件。
<?php // example.phprequire "thumbimage.class.php"; $objThumbImage = new ThumbImage("/web/uploads/orig.jpg"); $objThumbImage->createThumb("/web/uploads/thumb.jpg", 125);
首先,我们包含所需的类文件。
接下来,我们创建一个ThumbImage类的实例并将其分配给$objThumbImage变量。需要注意的是,我们在实例化ThumbImage类时将原始图像文件的路径作为第一个参数传递给了构造函数。
最后,我们使用该createThumb方法创建缩略图。在该createThumb方法中,第一个参数是缩略图路径,第二个参数是缩略图的宽度。当然,如果不传递第二个参数,则在调整大小时将使用默认宽度 100。
继续运行example.php文件,它应该会创建缩略图。
如果有任何问题,并且未创建缩略图图像,则应首先检查您是否具有正确的目录权限。在大多数情况下,这应该可以解决它。如果问题仍然存在,请确保源图像存在并且您提供了正确的ThumbImage类路径。当然,如果您遇到任何具体问题,您可以随时与我联系。
结论
这就是 GD 库允许您在 PHP 中创建图像缩略图的方式。正如我们之前讨论的,您永远不应该在您的网站上显示原始图像。通常,您需要创建不同版本的图像,例如用于列表页面的小缩略图、用于介绍页面的中缩略图和用于缩放功能的大版本。
- ThumbImage班级_
- 示例文件