Здравствуйте уважаемые программисты. Сегодня задумался про формат webp. На сервере есть загрузчик. Подумал, а не сделать ли мне там сразу конвертор загружаемых изображений в webP. Для начала решил потестировать преобразование в обычном php файле.
Делал так:
src = '1.jpg';
$info = pathinfo($src);
$img = imageCreateFromJpeg($src);
imageWebp($img, $info['dirname'] . '/' . $info['filename'] . '.' . 'webp', 100);
imagedestroy($img);
Файл успешно сохранялся на сервере и даже на ПК корректно открывался, но при попытке его отобразить на странице, я получал просто пустое окно с размерами данной картинки.
Стал мониторить интернет и наткнулся на статью, где написано как человек дошел до понимания проблемы. В итоге, как он пишет:
Немного поисследовав структуру WEBP, я пришел к выводу, что все живые файлы всегда заканчиваются байтом x00, кроме того WEBP продолжает нормально работать, если добавить любое количество x00 в конец
И тут же он предложил решение проблемы, которое мне тоже помогло
Так и появился на свет очередной костыль. Сразу после генерации изображения, дописываем x00 в конец файла.
//x00 webp generation fix
$fpr=fopen($webpDestination, "a+");
fwrite($fpr, chr(0x00));
fclose($fpr);
Все это здорово, но вопрос почему библиотека так себя ведет и как это исправить без костыля? - остается открытым!
P.S: Проблема на разных сервера может проявляться и нет.