Intervention Image и webp
Intervention Image и webp. Решение ошибки "Unable to init from given binary data"
Al-Sher
Здравствуйте. Недавно была необходимость работать с изображениями, расширение которых было webp, и я был удивлен, что Intervention Image отказывается принимать изображением. При попытках использовать команду
Image::make('path_to_image.webp')
Я получал ошибку > Unable to init from given binary data
Первое, что пришло мне в голову - Intervention Image не смог получить изображение. Тогда я начал пытаться использовать следующий код:
$imgContent = file_get_contents('path_to_image.webp');
$img = Image::make($imgContent);
И данный код должен был бы работать, ведь Intervention Image поддерживает бинарные данные. Но неудача - снова ошибка. Я перепроверял содержимое переменной imgContent и оно было в нормальном состоянии. Лишь тогда я стал догадываться, что Intervention Image не может обработать webp изображение. Я был расстроен и пошел гуглить... Наткнулся на github и огорчился еще больше - данная проблема существует уже очень давно. Там же я наткнулся на попытки преобразовать изображение в base64 и скормить его Intervention Image:
$base64Image = base64_encode(file_get_contents('path_to_image.webp'));
$image = Image::make($base64Image);
К сожалению и данный вариант не сработал. Как же я был счастлив, вспомнив что Intervention Image поддерживает GD Resource. Моя жизнь загорелась новыми красками. Я нашел способ скормить изображение Intervention Image:
$imgContent = imagecreatefromwebp('path_to_image.webp');
$img = Image::make($imgContent);
Данный способ у меня работает стабильно. Надеюсь, что данная небольшая запись поможет людям подружить Intervention Image и webp.