这是一个易于理解的示例,使用类型声明(PHP 7.1.0+)
此函数将常见图像格式(PNG
,JPG/JPEG
,GIF
)的任何文件转换为WEBP
。
function convertImageToWebp(string $inputFile, string $outputFile, int $quality = 100): void
{
$fileType = exif_imagetype($inputFile);
switch ($fileType) {
case IMAGETYPE_GIF:
$image = imagecreatefromgif($inputFile);
imagepalettetotruecolor($image);
imagealphablending($image, true);
imagesavealpha($image, true);
break;
case IMAGETYPE_JPEG:
$image = imagecreatefromjpeg($inputFile);
break;
case IMAGETYPE_PNG:
$image = imagecreatefrompng($inputFile);
imagepalettetotruecolor($image);
imagealphablending($image, true);
imagesavealpha($image, true);
break;
case IMAGETYPE_WEBP:
rename($inputFile, $outputFile);
return;
default:
return;
}
imagewebp($image, $outputFile, $quality);
imagedestroy($image);
}
使用方法:
convertImageToWebp('image.png', 'image.webp');
convertImageToWebp('/var/www/app/assets/image.jpg', '/var/www/app/assets/image.webp');
convertImageToWebp('/home/paul/image.gif', 'image.webp', 90);
要求:(在composer.json
文件中的require
部分添加)
"ext-exif": "*",
"ext-gd": "*"
需要exif
扩展来支持exif_imagetype
函数。
其他函数需要gd
扩展: imagecreatefromxyz
,imagewebp
,imagedestroy
。
解释:
exif_imagetype
函数从图像的元数据中读取文件类型
- 如果
$inputFile
已经是
- 如果
$outputFile
已经存在,它将被覆盖(rename
和imagewebp
函数都会这样做)
GIF
和PNG
需要额外的3行代码,因为它们具有特殊的特性(颜色表示,透明度)