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() retorna um identificador de imagem representando a imagem obtida a partir do arquivo informado. Observe que arquivos WebP animados não podem ser lidos.

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

Caminho para a imagem WebP.

Valor Retornado

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

Registro de Alterações

Versão Descrição
8.0.0 Em caso de sucesso, esta função agora retorna um objeto GDImage; anteriormente, um resource era retornado.

Exemplos

Exemplo #1 Converte uma imagem WebP para jpeg usando imagecreatefromwebp()

<?php
// Carrega o arquivo WebP
$im = imagecreatefromwebp('./example.webp');

// Converte para um jpeg com 100% de qualidade
imagejpeg($im, './example.jpeg', 100);
imagedestroy($im);
?>

add a note add a note

User Contributed Notes 1 note

up
1
kawewong at gmail dot com
3 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