WebP是Google推出的一种同时支持有损和无损压缩的图像格式,相比JPEG和PNG能在相同画质下大幅减小文件体积,在网页加载优化场景中使用非常广泛。PHP 7.4作为仍被广泛使用的PHP版本,要处理WebP图像需要依赖GD库的支持,并且GD库在编译时必须开启WebP相关开关。
检查GD库是否支持WebP
首先可以通过PHP内置函数查看GD库的编译信息,确认是否包含WebP支持。最直接的方式是使用gd_info()函数,该函数会返回GD库的详细配置信息。
<?php
// 获取GD库配置信息
$gdInfo = gd_info();
// 打印所有配置项
print_r($gdInfo);
// 单独检查WebP支持情况
if (isset($gdInfo['WebP Support']) && $gdInfo['WebP Support'] === true) {
echo 'GD库已开启WebP支持';
} else {
echo 'GD库未开启WebP支持';
}
如果输出的配置项中WebP Support对应的值为true,说明当前GD库已经支持WebP处理,否则需要重新编译GD库开启对应开关。
重新编译GD库开启WebP支持
如果检查后发现GD库没有WebP支持,需要根据PHP 7.4的安装方式重新编译GD库。如果是源码编译安装的PHP,可以按以下步骤操作:
- 首先安装WebP的依赖库,在Ubuntu/Debian系统中执行
sudo apt-get install libwebp-dev,在CentOS系统中执行sudo yum install libwebp-devel - 进入PHP 7.4的源码目录下的ext/gd文件夹
- 执行
phpize命令生成编译配置 - 执行编译命令
./configure --with-php-config=/path/to/php-config --with-webp-dir=/usr,其中路径需要替换为实际的php-config路径 - 执行
make && make install完成编译安装 - 重启PHP服务使配置生效
PHP 7.4处理WebP图像示例
确认GD库支持WebP后,就可以使用相关函数处理WebP图像了,以下是常见的操作示例:
将JPEG图像转换为WebP格式
<?php // 源JPEG图像路径 $sourcePath = 'test.jpg'; // 输出的WebP图像路径 $outputPath = 'test.webp'; // 创建JPEG图像资源 $image = imagecreatefromjpeg($sourcePath); // 保存为WebP格式,质量设置为80 imagewebp($image, $outputPath, 80); // 释放图像资源 imagedestroy($image); echo 'JPEG转WebP完成';
读取WebP图像并输出到浏览器
<?php
// WebP图像路径
$webpPath = 'test.webp';
// 设置响应头为WebP格式
header('Content-Type: image/webp');
// 创建WebP图像资源
$image = imagecreatefromwebp($webpPath);
// 输出图像到浏览器
imagewebp($image);
// 释放资源
imagedestroy($image);
注意事项
在使用GD库处理WebP图像时,需要注意PHP 7.4的GD库版本对应的WebP特性支持情况,部分较旧的GD库版本可能不支持WebP的无损压缩或者动画WebP处理。如果业务场景需要处理复杂的WebP特性,也可以考虑使用Imagick扩展替代GD库,同样需要先确认Imagick是否编译了WebP支持。