Современные форматы изображения JPEG 2000, JPEG XR и WebP

126
24 мая 2019, 19:10

прошу помощи решить проблему при оптимизации сайта , гугл pagespeed просит "Используйте современные форматы изображений" (JPEG 2000, JPEG XR и WebP) попробовал формат

WebP - вроде работает но оказалось он не отображает в Firefox , Safari

JPEG 2000 - вообще не могу вывести на Web как обычную картинку

подскажите может кто-то сталкивался с такими форматами как с ними правильно работать или как вывести на web JPEG 2000 , работает он вообще в других браузерах ?

Answer 1

Можно использовать тег picture:

<picture>
    <source type="image/webp" srcset="path/to/image.webp">
    <source type="image/jp2" srcset="path/to/image.jp2">
    <source type="image/jxr" srcset="path/to/image.jxr">
    <img src="path/to/image.jpg">
</picture>

Но тег picture тоже мало где поддерживается, поэтому нужен будет js: https://github.com/scottjehl/picturefill Достаточно просто подключить и всё:

<script async=true src=/path/to/picturefill.js></script> 
<script async=true src=/path/to/jxr.js></script> 
<script async=true src=/path/to/jp2.js></script>

Но я бы не стал заморачиваться и всё таки ПОКА проигнорировал рекомендации гугла. Может быть в будущем к этому можно будет вернуться.

UPD от 26.01.2019: пример реалиализации отдачи webp на стороне веб-сервера, например Nginx.

Как правило браузер передаёт серверу информацию о поддерживаемых технологий. Например Chrome передаёт такие значения Accept: image/webp, */*;q=0.8. Поэтому можно отдавать определённые изображения на стороне сервера.

Пример Nginx:

location / {
  # проверка заголовка Accept и наличия версии файла в .webp 
  if ($http_accept ~* "webp")    { set $webp_accept "true"; }
  if (-f $request_filename.webp) { set $webp_local  "true"; }
  # если WebP есть, то передать Vary
  if ($webp_local = "true") {
    add_header Vary Accept;
  }
  # если клиент поддерживает WebP, то передать файл
  if ($webp_accept = "true") {
    rewrite (.*) $1.webp break;
  }
}

Пример Apache:

<IfModule mod_rewrite.c>
  RewriteEngine On
  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>
AddType image/webp .webp

Примеры для разных веб-серверов можно найти здесь.

READ ALSO
Отправка form-data через CURL

Отправка form-data через CURL

Сервер принимает в обработку текстовом формате данные через form-dataНе могу понять как правильно эти данные отправить ? Через Postman всё работает...

142
QT restoreGeometry срабатывает слишком поздно

QT restoreGeometry срабатывает слишком поздно

Доброй ночи! У меня тут какая-то непонятная ситуацияНапример, в методе readMapSettings() в waterBody

116
C++, Указатели. delete

C++, Указатели. delete

Вопрос в следующем(тк

158
Что делает строка virtual ~Figure() {};?

Что делает строка virtual ~Figure() {};?

Что делает эта строка:

137