Jump to content

Recommended Posts

Хостинг? Напишите своему хостинг-провайдеру письмо о том, что на сервере webp support есть, но изображения webp не создаются через imagewebp. Пусть проверят.

Предварительно (на всякий случай) очистите папку resized или в какую у вас записываются изображения с изменёнными размерами.

Link to post
Share on other sites

Хостинг? Напишите своему хостинг-провайдеру письмо о том, что на сервере webp support есть, но изображения webp не создаются через imagewebp. Пусть проверят.

Предварительно (на всякий случай) очистите папку resized или в какую у вас записываются изображения с изменёнными размерами.

 

измененные изображения по факту должны записываться в папку products же? 

а со статическими изображениями( фото бренда, фото категории) ? Ручками переделываете?

Link to post
Share on other sites

У меня это папка files/products, какая у вас - не знаю, все в настройках ставят как хотят.

Фото категории у меня также сохраняются в этой папке как webp и как jpg. Брендов у меня нет

Остальное (то, что в шаблоне) - да, руками

Link to post
Share on other sites

У меня это папка files/products, какая у вас - не знаю, все в настройках ставят как хотят.

Фото категории у меня также сохраняются в этой папке как webp и как jpg. Брендов у меня нет

Остальное (то, что в шаблоне) - да, руками

 

так а как фото категории у вас создается как webp если там ресайз не используется? 

Edited by Kami
Link to post
Share on other sites

так а как фото категории у вас создается как webp если там ресайз не используется? 

У меня используется. Видимо, давно сделал по аналогии с товарами.

Link to post
Share on other sites
  • 7 months later...

что исправить? imagedestroy() expects parameter 1 to be resource, string given in /,,,,,,,,,,,,/resize/resize.php on line 29

ресайз webp создается только после клика по jpeg, вывожу через |replace:'.jpg':'.webp', картинок нет пишет the image could not be loaded

Link to post
Share on other sites
  • 2 months later...

У меня - все, установленные на компьютере. С проблемой Сергеевича знаком, насколько помню, у него создавались webp изображения, но htaccess не обрабатывался - проблема была с настройками сервера. Потому он вам и задал вопрос - у вас webp изображения не создаются или браузер их не выводит? Вы не ответили, поэтому где у вас проблема, непонятно.

Подскажите пожалуйста, закинул ваш код в .htaccess и в resize.php. Webp создается, но загоняю в pagespeed insights пишет что используется jpg. Что проверить чтоб загружался webp ?

 

Слаб в этом, подскажите куда и что заливать, пожалуйста.

 

я же правильно понимаю, это код, что б перевести все изображения jpg на сайте в webp ?

Link to post
Share on other sites

 

Я понял, что вы хотите, заодно разобрался с тем, что такое webp, какие браузеры поддерживают этот формат и как распознать такой браузер.

Всё гениальное просто. Очень просто, но потратил на это весь вечер.

В resize.php в самый конец добавляете

 

 

 

 
$webp_filename = preg_replace('/\.[^.]+$/','',$resized_filename).".webp";
if (file_exists($webp_filename))
{
}
else
{
    $imagetoconvert = imagecreatefromjpeg($resized_filename);  
    imagewebp($imagetoconvert, $webp_filename, 80);
    imagedestroy($resized_filename);
}
 

 

 

Далее в htaccess прописываете

 


AddType image/webp .webp
<IfModule mod_rewrite.c>
RewriteCond %{HTTP_ACCEPT} image/webp
RewriteCond %{DOCUMENT_ROOT}/$1.webp -f
RewriteRule (.+)\.(jpe?g|png)$ $1.webp [T=image/webp,E=accept:1]
</IfModule>
<IfModule mod_headers.c>
Header append Vary Accept env=REDIRECT_accept 
</IfModule> 


Все очень хорошо работает, остается только один вопрос, файлы .jpeg конвертируются, а вот с .png не получается

Link to post
Share on other sites

Все очень хорошо работает, остается только один вопрос, файлы .jpeg конвертируются, а вот с .png не получается

 

В /resize/resize.php заменить код 

 

$webp_filename = preg_replace('/\.[^.]+$/','',$resized_filename).".webp";
if (file_exists($webp_filename))
{
}
else
{
    $imagetoconvert = imagecreatefromjpeg($resized_filename);  
    imagewebp($imagetoconvert, $webp_filename, 80);
    imagedestroy($resized_filename);
}
 

 

на 

 

$webp_filename = preg_replace('/\.[^.]+$/','',$resized_filename).".webp";
$info = getimagesize($resized_filename);
if (file_exists($webp_filename)) {
} else {
	if ($info['mime'] == 'image/jpeg') {
		$imagetoconvert = imagecreatefromjpeg($resized_filename);  
		imagewebp($imagetoconvert, $webp_filename, 80);
		imagedestroy($resized_filename);
	} elseif ($info['mime'] == 'image/png') {
		$imagetoconvert = imagecreatefrompng($resized_filename);  
		imagewebp($imagetoconvert, $webp_filename, 80);
		imagedestroy($resized_filename);
	}
}
Link to post
Share on other sites
  • 6 months later...

Но я бы лучше конвертировал картинки товаров в момент загрузки в .jpeg

 

а как поймать изображения и в jpg их перевести? при ресайзе? не подскажете?

Link to post
Share on other sites
  • 2 months later...
  • 4 months later...
В 11.12.2018 в 16:50, question сказал:

Странно, я ведь писал ответ...

Для начала в районе 300 строки

            return imageJpeg($dst_img, $dst_file, $quality);

надо заменить на 

            return imageWebp($dst_img, $dst_file, $quality);

Вот только у меня сайт перестаёт работать, на первом же изображении код обрывается.

Автору советую проверить на работоспособность такой код:


<?

$file='1.jpg';
$image= imagecreatefromjpeg($file);
imagewebp($image,'1.webp',80);
imagedestroy($image);

?>

Если 1.webp не создаётся, значит, у вашего хостера не установлены необходимые компоненты.

Попробовал с этим решением работает, webp создается, но с эти кодом не работает ?

 

В 11.12.2018 в 22:14, question сказал:

Я понял, что вы хотите, заодно разобрался с тем, что такое webp, какие браузеры поддерживают этот формат и как распознать такой браузер.

Всё гениальное просто. Очень просто, но потратил на это весь вечер.

В resize.php в самый конец добавляете

 

 

 


 
$webp_filename = preg_replace('/\.[^.]+$/','',$resized_filename).".webp";
if (file_exists($webp_filename))
{
}
else
{
    $imagetoconvert = imagecreatefromjpeg($resized_filename);  
    imagewebp($imagetoconvert, $webp_filename, 80);
    imagedestroy($resized_filename);
}
 

 

 

Далее в htaccess прописываете

 


AddType image/webp .webp
<IfModule mod_rewrite.c>
RewriteCond %{HTTP_ACCEPT} image/webp
RewriteCond %{DOCUMENT_ROOT}/$1.webp -f
RewriteRule (.+)\.(jpe?g|png)$ $1.webp [T=image/webp,E=accept:1]
</IfModule>
<IfModule mod_headers.c>
Header append Vary Accept env=REDIRECT_accept 
</IfModule> 

 

вот с эти не работает, кто-то сталкивался с данной проблемой?

Link to post
Share on other sites
  • 1 month later...
В 19.01.2021 в 16:40, get31 сказал:

Попробовал с этим решением работает, webp создается, но с эти кодом не работает ?

 

вот с эти не работает, кто-то сталкивался с данной проблемой?

Перед внесением изменений в htaccess, попросите уточните у хостера и попросите отключить обработку расширений jpg|jpeg|gif|png на стороне сервера. Некоторые хостеры (например хостингукраина и thehost) передают статику и картинки на nginx, и правила htaccess на них не действуют.

После отключения обработки статики этого правила редиректа заработают.

Так же надо не забывать добавить кеширование, т.к. сервер уже не будет обрабатывать картинки 

ExpiresActive On
 #кэшировать флэш и изображения на год
 ExpiresByType image/x-icon "access 1 year"
 ExpiresByType image/jpeg "access 1 year"
 ExpiresByType image/png "access 1 year"
 ExpiresByType image/gif "access 1 year"
 ExpiresByType image/webp "access 1 year"

Link to post
Share on other sites

Еще раз подытожу.

1) В /resize/resize.php добавляем код в самый конец

$webp_filename = preg_replace('/\.[^.]+$/','',$resized_filename).".webp";
$info = getimagesize($resized_filename);
if (file_exists($webp_filename)) {
} else {
	if ($info['mime'] == 'image/jpeg') {
		$imagetoconvert = imagecreatefromjpeg($resized_filename);  
		imagewebp($imagetoconvert, $webp_filename, 80);
		imagedestroy($resized_filename);
	} elseif ($info['mime'] == 'image/png') {
		$imagetoconvert = imagecreatefrompng($resized_filename);  
		imagewebp($imagetoconvert, $webp_filename, 80);
		imagedestroy($resized_filename);
	}
}

2) В .htaccess

AddType image/webp .webp
<IfModule mod_rewrite.c>
RewriteCond %{HTTP_ACCEPT} image/webp
RewriteCond %{DOCUMENT_ROOT}/$1.webp -f
RewriteRule (.+)\.(jpe?g|png)$ $1.webp [T=image/webp,E=accept:1]
</IfModule>
<IfModule mod_headers.c>
Header append Vary Accept env=REDIRECT_accept 
</IfModule>

ExpiresActive On
 #кэшировать флэш и изображения на год
 ExpiresByType image/x-icon "access 1 year"
 ExpiresByType image/jpeg "access 1 year"
 ExpiresByType image/png "access 1 year"
 ExpiresByType image/gif "access 1 year"
 ExpiresByType image/webp "access 1 year"

3) Потом на сайте смотрим путь к картинкам товаров, обычно это /files/products. На хостинге по фтп меняем имя папки на products2 к примеру, создаем новую папку products пустую. Обновляем любую страницу на сайте. Новые картинки должны сгенерироватся в папке products и иметь свою вторую версию в webp.

4) Если картинки не герерируются - создаем в корне сайта файл phpinfo.php с содержимым

<?php phpinfo(); ?>

<?php
$file='1.jpg';
$image= imagecreatefromjpeg($file);
imagewebp($image,'1.webp',80);
imagedestroy($image);
echo ($file);
?>

Смотрим версию php, для работы функции imagewebp создания нужна версия php 5.5+

Загружаем в корень сайта картинку с именем 1.jpg

Открываем в браузере ссылку имя вашего сайта/phpinfo.php

Мотаем в самый низ, если строка echo ($file); вывела 1.jpg -  имя загруженой картинки - значит со стороны хостинга все работает, в корне должна появится картинка 1.webp

Если вывелась ошибка "вызов неопределенной функции imagewebp ()" - значит пинаем хостера/обновляем php.

5) Проверить работоспособность метода - первый признак это то что гугл перестает ругаться на оптимизацию формата картинок. Второй - жмем правой на картинке - проверить - вкладка Network - выбрать img, обновить страницу через ctrl+r, и посмотреть тип картинки. На товарах должен быть webp. Надо осознать что если вы скачаете на пк то получите .jpg, но это не показатель, браузер ориентируется по типу и грузит webp а не jpg. На jpg у вас в коде просто остаются ссылки.  

 

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...