PHP 8.1.26 Released!

imagecreatefromwebp

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

imagecreatefromwebpCria uma nova imagem a partir de um arquivo ou URL

Descrição

imagecreatefromwebp(string $filename): GdImage|false

imagecreatefromwebp() returns an image identifier representing the image obtained from the given filename. Note that animated WebP files cannot be read.

Dica

Uma URL pode ser usada como um nome de arquivo com esta função se os wrappers fopen estiverem habilitados. Consulte a função fopen() para mais detalhes sobre como especificar o nome do arquivo. Consulte os Protocolos e Wrappers suportados para obter links para informações sobre as capacidades de cada wrapper, notas de uso e informações sobre quaisquer variáveis predefinidas que eles possam fornecer.

Parâmetros

filename

Path to the WebP image.

Valor Retornado

Retorna um objeto de imagem em caso de sucesso, false em caso de erros.

Changelog

Versão Descrição
8.0.0 On success, this function returns a GDImage instance now; previously, a resource was returned.

Exemplos

Exemplo #1 Convert an WebP image to a jpeg image using imagecreatefromwebp()

<?php
// Load the WebP file
$im = imagecreatefromwebp('./example.webp');

// Convert it to a jpeg file with 100% quality
imagejpeg($im, './example.jpeg', 100);
imagedestroy($im);
?>

add a note

User Contributed Notes 1 note

up
9
kawewong at gmail dot com
2 years ago
PHP GD and WebP support:

Normal WebP (VP8): supported since PHP 5.4
Transparent WebP or alpha transparency (VP8X, VP8L): supported since PHP 7.0
Animated WebP (VP8X): not supported at all.

You can use the images from here https://developers.google.com/speed/webp/gallery2
here https://ezgif.com/help/alternative-animated-image-formats
and here https://developers.google.com/speed/webp/gallery1

Test with imagecreatefromwebp('your-image.webp'); and see the errors.

You can detect animated or transparent webp using this code.

<?php
/**
* Get WebP file info.
*
* @link https://www.php.net/manual/en/function.pack.php unpack format reference.
* @link https://developers.google.com/speed/webp/docs/riff_container WebP document.
* @param string $file
* @return array|false Return associative array if success, return `false` for otherwise.
*/
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/' . // get n string
'I1Filesize/' . // get integer (file size but not actual size)
'A4Webp/' . // get n string
'A4Vp/' . // get n string
'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) {
// if it is VP8L, I assume that this image will be transparency
// as described in 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
?>

Reference: https://stackoverflow.com/a/68491679/128761

Usage:

<?php
$info
= webpinfo('your-image.webp');
if (isset(
$info['Animation']) && $info['Animation'] === true) {
echo
'It is animated webp.';
}
if (isset(
$info['Alpha']) && $info['Alpha'] === true) {
echo
'It is transparent webp.';
}
?>
To Top