note 126269 added to function.imagecreatefromwebp

From: Date: Fri, 23 Jul 2021 09:43:03 +0000
Subject: note 126269 added to function.imagecreatefromwebp
Groups: php.notes 
Request: Send a blank email to php-notes+get-216641@lists.php.net to get a copy of this message
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.'; } ?> ---- Server IP: 45.112.84.4 Probable Submitter: 45.112.85.242 (proxied: 49.228.225.130) ---- Manual Page -- https://php.net/manual/en/function.imagecreatefromwebp.php Edit -- https://main.php.net/note/edit/126269 Del: integrated -- https://main.php.net/note/delete/126269/integrated Del: useless -- https://main.php.net/note/delete/126269/useless Del: bad code -- https://main.php.net/note/delete/126269/bad+code Del: spam -- https://main.php.net/note/delete/126269/spam Del: non-english -- https://main.php.net/note/delete/126269/non-english Del: in docs -- https://main.php.net/note/delete/126269/in+docs Del: other reasons-- https://main.php.net/note/delete/126269 Reject -- https://main.php.net/note/reject/126269 Search -- https://main.php.net/manage/user-notes.php

« previous php.notes (#216641) next »