Преобразование jpg в webp с помощью imagewebp

У меня возникли проблемы с использованием imagewebp для преобразования изображения в webp.

Я использую этот код:

$filename = dirname(__FILE__) .'/example.jpg';

$im = imagecreatefromjpeg($filename);

$webp =imagewebp($im, str_replace('jpg', 'webp', $filename));
imagedestroy($im);

var_dump($webp);

$webp возвращает true, но когда я пытаюсь просмотреть webp-изображение в Chrome, оно просто отображается пустым, но с правильным размером. Если вместо этого я загружаю изображение и устанавливаю заголовки с помощью PHP (см. ниже), оно отображается, но с неправильными цветами (слишком много желтого).

$im = imagecreatefromwebp('example.webp');
header('Content-Type: image/webp');
imagewebp($im);
imagedestroy($im);

Если я конвертирую одно и то же изображение с помощью командной строки, оно работает, как и ожидалось.

cwebp -q 100 example.jpg -o example.webp

Я тестирую это на Ubuntu 14, Apache 2.4.7 и PHP 5.5.9-1ubuntu4.4.


person Stefan Edberg    schedule 11.10.2014    source источник
comment
Хмм хорошо. Это не объясняет моей проблемы с белым jpeg -> webp :(.   -  person Stefan Edberg    schedule 12.10.2014
comment
Я пробовал это еще несколько раз, и изображения до 1920x1440, похоже, работают нормально. Большие изображения загружаются, отображаются на долю секунды, а затем просто исчезают. Хотя размер изображения правильный. Мой текущий предел памяти составляет 128 МБ, но это не помогает, когда я устанавливаю его на 256 МБ.   -  person Stefan Edberg    schedule 02.11.2014
comment
@StefanEdberg: Я конвертирую из webp tp jpg. После конвертации даже я вижу слишком много желтого на картинке. Как мне этого избежать. Пожалуйста, помогите ..   -  person Basher51    schedule 20.11.2014
comment
Вы когда-нибудь решали это? У меня такая же проблема.   -  person Paul Phillips    schedule 24.04.2015
comment
Нет, я ничего не смотрел на это с тех пор, как написал этот вопрос. Извиняюсь.   -  person Stefan Edberg    schedule 01.05.2015
comment
Теперь я сообщил об этом как об ошибке: bugs.php.net/bug.php?id =70045   -  person Stefan Edberg    schedule 12.07.2015
comment
Похоже, это было или будет исправлено: bugs.php.net/bug.php? id=66590 github.com/libgd/libgd/issues/176   -  person Stefan Edberg    schedule 22.07.2015
comment
У меня работает с 5.6.4-4ubuntu6.3.   -  person Stefan Edberg    schedule 08.10.2015
comment
У меня работает на PHP 5.6.33-0+deb8u1 (и выше, я думаю)   -  person aexl    schedule 23.03.2021


Ответы (2)


У меня была такая же проблема, мое решение:

$file='hnbrnocz.jpg';
$image=  imagecreatefromjpeg($file);
ob_start();
imagejpeg($image,NULL,100);
$cont=  ob_get_contents();
ob_end_clean();
imagedestroy($image);
$content =  imagecreatefromstring($cont);
imagewebp($content,'images/hnbrnocz.webp');
imagedestroy($content);
person Radek Drlik    schedule 05.07.2015
comment
Спасибо за ваш ответ. У меня это не работает, когда я тестирую одно из изображений, отправленных с ошибкой. - person Stefan Edberg; 12.07.2015

Оно работает:

$jpg=imagecreatefromjpeg('filename.jpg');
$w=imagesx($jpg);
$h=imagesy($jpg);
$webp=imagecreatetruecolor($w,$h);
imagecopy($webp,$jpg,0,0,0,0,$w,$h);
imagewebp($webp, 'filename.webp', 80);
imagedestroy($jpg);
imagedestroy($webp);
person Ashtor    schedule 07.10.2020
comment
Спасибо за этот фрагмент кода, который может предоставить некоторую ограниченную немедленную помощь. правильное объяснение значительно улучшит его долгосрочную ценность, показав, почему это хорошее решение проблемы и сделать его более полезным для будущих читателей с другими, похожими вопросами. Пожалуйста, отредактируйте свой ответ, чтобы добавить некоторые пояснения, включая сделанные вами предположения. - person jasie; 07.10.2020