imagecreatefromwebp

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

imagecreatefromwebp新しい画像をファイルあるいは URL から作成する

説明

imagecreatefromwebp(string $filename): GdImage|false

imagecreatefromwebp() は、指定したファイル名から得られる画像を表す ID を返します。 アニメーションWebP は読み取れないことに注意して下さい。

ヒント

fopen wrappers が有効の場合、この関数のファイル名として 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);
?>

add a note

User Contributed Notes 1 note

up
1
kawewong at gmail dot com
4 years ago
PHP GD and WebP support:Normal WebP (VP8): supported since PHP 5.4Transparent WebP or alpha transparency (VP8X, VP8L): supported since PHP 7.0Animated WebP (VP8X): not supported at all.You can use the images from here https://developers.google.com/speed/webp/gallery2here https://ezgif.com/help/alternative-animated-image-formatsand here https://developers.google.com/speed/webp/gallery1Test 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/128761Usage:<?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