imagecreatefromwebp

(PHP 5 >= 5.4.0, PHP 7, PHP 8)

imagecreatefromwebp从文件或 URL 创建新图像

描述

imagecreatefromwebp(string $filename): GdImage|false

imagecreatefromwebp() 返回一个图像标识符,表示从给定文件名获得的图像。请注意,无法读取动画 WebP 文件。

提示

如果启用了 fopen 包装器,则可以使用 URL 作为此函数的文件名。有关如何指定文件名的更多详细信息,请参见 fopen()。有关各个包装器的功能、使用说明以及它们可能提供的任何预定义变量的信息,请参见 支持的协议和包装器

参数

filename

WebP 图像的路径。

返回值

成功时返回一个图像对象,错误时返回 false

变更日志

版本 描述
8.0.0 成功时,此函数现在返回一个 GDImage 实例;以前,返回一个 resource

示例

示例 #1 使用 imagecreatefromwebp() 将 WebP 图像转换为 jpeg 图像

<?php
// 加载 WebP 文件
$im = imagecreatefromwebp('./example.webp');

// 将其转换为质量为 100% 的 jpeg 文件
imagejpeg($im, './example.jpeg', 100);
imagedestroy($im);
?>

添加注释

用户贡献的注释 1 条注释

11
kawewong at gmail dot com
3 年前
PHP GD 和 WebP 支持

普通 WebP (VP8):从 PHP 5.4 开始支持
透明 WebP 或 Alpha 透明度 (VP8X、VP8L):从 PHP 7.0 开始支持
动画 WebP (VP8X):完全不支持。

您可以使用来自此处的图像 https://developers.google.com/speed/webp/gallery2
这里 https://ezgif.com/help/alternative-animated-image-formats
以及这里 https://developers.google.com/speed/webp/gallery1

使用 imagecreatefromwebp('your-image.webp'); 测试并查看错误。

您可以使用此代码检测动画或透明 WebP。

<?php
/**
* 获取 WebP 文件信息。
*
* @link https://php.net/manual/en/function.pack.php unpack 格式参考。
* @link https://developers.google.com/speed/webp/docs/riff_container WebP 文档。
* @param string $file
* @return array|false 成功返回关联数组,否则返回 `false`。
*/
function webpinfo($file) {
if (!
is_file($file)) {
return
false;
} else {
$file = realpath($file);
}

$fp = fopen($file, 'rb');
if (!
$fp) {
return
false;
}

$data = fread($fp, 90);

fclose($fp);
unset(
$fp);

$header_format = 'A4Riff/' . // 获取 n 个字符串
'I1Filesize/' . // 获取整数 (文件大小,但不是实际大小)
'A4Webp/' . // 获取 n 个字符串
'A4Vp/' . // 获取 n 个字符串
'A74Chunk';
$header = unpack($header_format, $data);
unset(
$data, $header_format);

if (!isset(
$header['Riff']) || strtoupper($header['Riff']) !== 'RIFF') {
return
false;
}
if (!isset(
$header['Webp']) || strtoupper($header['Webp']) !== 'WEBP') {
return
false;
}
if (!isset(
$header['Vp']) || strpos(strtoupper($header['Vp']), 'VP8') === false) {
return
false;
}

if (
strpos(strtoupper($header['Chunk']), 'ANIM') !== false ||
strpos(strtoupper($header['Chunk']), 'ANMF') !== false
) {
$header['Animation'] = true;
} else {
$header['Animation'] = false;
}

if (
strpos(strtoupper($header['Chunk']), 'ALPH') !== false) {
$header['Alpha'] = true;
} else {
if (
strpos(strtoupper($header['Vp']), 'VP8L') !== false) {
// 如果是 VP8L,我假设此图像将是透明的
// 如 https://developers.google.com/speed/webp/docs/riff_container#simple_file_format_lossless 中所述
$header['Alpha'] = true;
} else {
$header['Alpha'] = false;
}
}

unset(
$header['Chunk']);
return
$header;
}
// webpinfo
?>

参考: https://stackoverflow.com/a/68491679/128761

用法

<?php
$info
= webpinfo('your-image.webp');
if (isset(
$info['Animation']) && $info['Animation'] === true) {
echo
'它是动画 webp。';
}
if (isset(
$info['Alpha']) && $info['Alpha'] === true) {
echo
'它是透明的 webp。';
}
?>
To Top