Как получить размер изображения WebP на PHP
Как получить размер изображения WebP на PHP
Столкнулся с ситуацией, что PHP-шная функция для получения размера изображения GetImageSize возвращает нулевые значения при попытке обработать картинки WebP. При этом поддержка WebP в PHP частично имеется. Пришлось все делать самостоятельно.
В процессе изучения материала выяснилось, что файлы WebP по внутренней структуре могут быть трех форматов: Simple File Format (Lossy), Simple File Format (Lossless) и Extended File Format. Размер изображения в каждом из форматов хранится по-своему. В результате у меня получился вот такой код для определения размеров изображения WebP, который учитывает все три формата.
Code (PHP) : Убрать нумерацию
- // Путь к файлу изображения
- $file_path='sample.webp';
- $f=fopen($file_path,'r');
- $data=fread($f,32);
- fclose($f);
- // Simple File Format (Lossy)
- if (substr($data,8,8)=='WEBPVP8 ') {
- $tmp=unpack('v',substr($data,0x1A,2));
- $x=$tmp[1];
- $tmp=unpack('v',substr($data,0x1C,2));
- $y=$tmp[1];
- }
- // Simple File Format (Lossless)
- elseif (substr($data,8,8)=='WEBPVP8L') {
- $tmp=unpack('V',substr($data,0x15,4));
- $x=($tmp[1] & 0x3FFF)+1;
- $y=(($tmp[1]>>14) & 0x3FFF)+1;
- }
- // Extended File Format
- elseif (substr($data,8,8)=='WEBPVP8X') {
- $tmp=unpack('V',substr($data,0x18,4));
- $x=($tmp[1] & 0xFFFFFF)+1;
- $tmp=unpack('V',substr($data,0x1B,4));
- $y=($tmp[1] & 0xFFFFFF)+1;
- }
- else {
- $x=0;
- $y=0;
- }
Просмотров: 1691 | Комментариев: 4
Внимание! Статья опубликована больше года назад, информация могла устареть!
Комментарии
Отзывы посетителей сайта о статье
Сергей
(06.04.2024 в 00:23):
Да, впервые getimagesize не сработал для WebP, воспользовался вашим кодом, благодарю!
Дмитрий
(04.01.2022 в 12:56):
ManHunter, да я тестирую на 7.3.
Но WEBP это пол беды, сейчас пришла новая напасть в виде HEIC, даже на Windows 10 пришлось расширение ставить чтобы это чудо лицезреть, а как с ним работать на php (без imagemagick), одному богу ведомо...
Но WEBP это пол беды, сейчас пришла новая напасть в виде HEIC, даже на Windows 10 пришлось расширение ставить чтобы это чудо лицезреть, а как с ним работать на php (без imagemagick), одному богу ведомо...
ManHunter
(04.01.2022 в 11:43):
В PHP7-8 это уже вроде починили, как и работу с lossless и расширенным webp. У меня PHP5.
Дмитрий
(04.01.2022 в 11:31):
На своих сайтах активно использую webp и проблем с getimagesize не разу не наблюдал, хотя ресайз изображений для превьюшек там идет постоянно. Возможно просто не попадались разные версии webp файлов. Если вам не сложно дополните эту статью, тремя изображениями разных форматов для теста.
Добавить комментарий
Заполните форму для добавления комментария