BPG — Jpeg and WebP Killer

Это было каким-то очередным вечером под кружку горячющего чая. Макс генерировал смайлики и филосовствовал о лучшем.

Так у меня появилась ссылка на сайт Фабриса Беллара. И на обсуждение в HN.

После поверхностного анализа было не совсем понятно, какой профит от использования технологии с такими минусами как:

  • JavaScript декодер весит 250Кб
  • К тому же медленный (не на сишечке же)
  • Браузер лагает как сотона во время декодинга
  • Крашится на гигантских изображениях
  • Если откинуть илитоту, то все поголовно снимают в jpg (не lossless форматы) — нахера конвертировать затем еще и в BPG?

Не буду отвечать на эти вопросы и доказывать с пеной у рта что-то там о чём-то там.

Подумав недельку я сам отверг затею разворачивать на имиджборде сторадж в BPG и запилил чиста по-дедовски.

Спустя год, я решил пересмотреть всё с чистого листа и вот что получилось:

  • 250кб для медиасайта — ничто, тем более кэшируется
  • Конвертировать можно в фоне не загружая поток графической системы
  • При заливе на сервак пикчи всё равно конвертируются и вычищаются от говна, тут я вообще за то, чтобы загружать lossless форматы
  • BPG сжатие выглядит визуально наиболее естественным благодаря HEVC
  • К тому же использование canvas’ов заместо img повышает производительность браузера при больших изображениях

Такие дела, юзать можно. Осталось пофиксать краши на разрешениях более 2K и всё.

В итоге я использую формат сжатия пикч который не мыло как WebP и не квадраты как даже Jpeg2000, не говоря про обычный Jpeg.

Поставить на MacOSX можно через homebrew:

brew install --with-x265 libbpg

x265 энкодер кодирует, к слову, довольно-таки резво в отличии от jctvc.

На гитхаб выложил доработанный JS-код, декодирующий в бэкграунде на WebWorker’ах, умеющий в анимацию: bpg-ww.