JPEG, javascript и браузер
Aug. 18th, 2014 06:23 pmЯ примерно в феврале прорабатывал вариант создания полностью браузерной CMS для простеньких сайтов. То-есть сайт хранится в браузерной IDB и собирается в браузере, а готовые страницы и ресурсы пакуются каждая в gzip и пишутся прямо на Amazon S3. Это облачное хранилище статики, ничего кроме выдачи файлов оно не умеет, но там есть милая опция – привязать свой домен к бакету. В gzip пакуем потому что S3 сам по себе не умеет отдавать ресурсы с компрессией, их надо туда сразу класть пред-компресснутые.
Это дело я тормознул на этапе проектирования – хотя технологически оно оказалось много проще, чем сначала виделось. Проблема, как обычно, выросла на совершенно неожиданном месте.
Дело в том, что с помощью средств браузера не сделать progressive jpeg. Чем он для веба важен – хорошо расписано на Хабре. С учётом особенностей статических сайтов – там обычно много графики – использование progressive jpeg это must.
Вообще, обычный JPEG в браузере можно сделать двумя способами.
Первый – сделать canvas, что-то на нём нарисовать и потом экспортнуть в JPEG с помощью .toDataURL, раскодировав получившийся base64 в binary. Сделать таким способом progressive jpeg решительно никак.
Второй способ – вынуть из канваса raw bitmap data и закодировать jpeg прямо яваскриптом. Увы, оказывается на яваскрипте нет ни одной библиотеки, пишущей прогрессивный jpeg и работающей с приемлемой скоростью. Для обычного jpeg – есть, и весьма шустрая. Для progressive – болт.
Это, вообще-то, для js-комьюнити феноменальный случай – чтобы какой-то довольно низкоуровневой либы, реализующей общепринятый стандарт, просто не существовало.
В этой связи и в связи с тем, что вопрос браузерной CMS вновь замаячил, задаю уважаемым френдам из сопредельных комьюнити вопрос.
Может, вам в работе попадалась какая то очень компактная либа, скажем, на C, которая пишет именно progressive jpeg? Я бы её перекомпилил в js и прикрыл бы эту брешь в js-codebase.
UPD. Есть уже вроде, попробую прикрутить. https://github.com/jrmuizel/cjpeg.js
UPD2. Хороший пример выбора нерелевантных кейвордов при поиске. Набери я сразу libjpeg emscripten, я бы получил ответ по третьей ссылке. А я искал progressive jpeg encoder javascript в разных вариациях.
UPD3. Не, не подошло, увы. Ищем дальше.
Это дело я тормознул на этапе проектирования – хотя технологически оно оказалось много проще, чем сначала виделось. Проблема, как обычно, выросла на совершенно неожиданном месте.
Дело в том, что с помощью средств браузера не сделать progressive jpeg. Чем он для веба важен – хорошо расписано на Хабре. С учётом особенностей статических сайтов – там обычно много графики – использование progressive jpeg это must.
Вообще, обычный JPEG в браузере можно сделать двумя способами.
Первый – сделать canvas, что-то на нём нарисовать и потом экспортнуть в JPEG с помощью .toDataURL, раскодировав получившийся base64 в binary. Сделать таким способом progressive jpeg решительно никак.
Второй способ – вынуть из канваса raw bitmap data и закодировать jpeg прямо яваскриптом. Увы, оказывается на яваскрипте нет ни одной библиотеки, пишущей прогрессивный jpeg и работающей с приемлемой скоростью. Для обычного jpeg – есть, и весьма шустрая. Для progressive – болт.
Это, вообще-то, для js-комьюнити феноменальный случай – чтобы какой-то довольно низкоуровневой либы, реализующей общепринятый стандарт, просто не существовало.
В этой связи и в связи с тем, что вопрос браузерной CMS вновь замаячил, задаю уважаемым френдам из сопредельных комьюнити вопрос.
Может, вам в работе попадалась какая то очень компактная либа, скажем, на C, которая пишет именно progressive jpeg? Я бы её перекомпилил в js и прикрыл бы эту брешь в js-codebase.
UPD. Есть уже вроде, попробую прикрутить. https://github.com/jrmuizel/cjpeg.js
UPD2. Хороший пример выбора нерелевантных кейвордов при поиске. Набери я сразу libjpeg emscripten, я бы получил ответ по третьей ссылке. А я искал progressive jpeg encoder javascript в разных вариациях.
UPD3. Не, не подошло, увы. Ищем дальше.