出现 “Unable to set image format” 错误通常意味着 Imagick 库无法识别或处理指定的图像格式。在您的情况下,可能是因为 Imagick 库不支持直接将原始图像转换为 WebP 格式导致的错误。
解决此问题的方法之一是先将原始图像转换为支持的格式,然后再将其转换为 WebP 格式。以下是一个修改后的示例代码,可以尝试使用这种方法:
<?php
$originalImagePath = $srcset_image;
$webpImagePath = '/' . pathinfo($originalImagePath, PATHINFO_BASENAME) . '.webp';
// 创建新的 Imagick 对象
$image = new Imagick($originalImagePath);
// 获取原始图像的格式
$format = strtolower($image->getImageFormat());
// 检查原始格式是否支持转换为 WebP
if ($format === 'jpg' || $format === 'jpeg' || $format === 'png') {
// 设置目标格式为 JPEG(或 PNG)以便用于临时保存
$tempImagePath = 'bmz_cache/temp/' . pathinfo($originalImagePath, PATHINFO_BASENAME) . '.jpg';
// 设置格式为 JPEG(或 PNG)
$image->setImageFormat('jpg'); // 如果原图是 PNG,则改为 'png'
// 保存为 JPEG(或 PNG)格式
$image->writeImage($tempImagePath);
// 释放资源
$image->clear();
$image->destroy();
// 创建新的 Imagick 对象
$image = new Imagick($tempImagePath);
// 设置目标格式为 WebP
$image->setImageFormat('webp');
// 保存为 WebP 格式
$image->writeImage($webpImagePath);
echo "图像转换成功!";
// 清理临时文件
unlink($tempImagePath);
} else {
echo "当前图片格式不支持转换为 WebP。";
}
// 释放资源
$image->clear();
$image->destroy();
?>
这段代码的调整是先将原始图像转换为 JPEG 或 PNG 格式,然后再将其转换为 WebP 格式。请注意,在实际应用中,您可能需要根据原始图像的格式和需要转换的目标格式进行相应的调整。希望这个方案可以解决您遇到的问题!如果还有任何疑问,请随时告诉我。
发表回复