(PHP 5 >= 5.4.0, PHP 7, PHP 8)
imagecreatefromwebp — Crear una nueva imagen a partir de un fichero o una URL
imagecreatefromwebp() devuelve un identificador de imagen que representa la imagen obtenida desde el fichero proporcionado. Tenga en cuenta que los ficheros WebP animados no pueden ser leídos.
Puede utilizar una URL como nombre de archivo con esta función, si el gestor fopen ha sido activado. Véase fopen() para más detalles sobre cómo especificar el nombre del archivo. Consulte Protocolos y Envolturas soportados para más información sobre las capacidades de los diferentes gestores, las notas sobre su uso, así como la información sobre las variables predefinidas que proporcionan.
filenameRuta hacia la imagen WebP.
Devuelve un objeto de imagen en caso de éxito, false en caso de error.
| Versión | Descripción |
|---|---|
| 8.0.0 | En caso de éxito, esta función devuelve ahora una instancia de GDImage ; anteriormente, se devolvía un resource . |
Ejemplo #1 Convierte una imagen WebP en una imagen jpeg utilizando la función imagecreatefromwebp()
<?php
// Carga el fichero WebP
$im = imagecreatefromwebp('./example.webp');
// Se convierte en un fichero jpeg con una calidad del 100%
imagejpeg($im, './example.jpeg', 100);
?>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.';
}
?>