Комментарии 18
лучше написать о AVIF, как из jpeg сделать avif на java, js…
В JPEG XL будет отдельный режим для пережатия обычных JPEG без потерь, где степень сжатия по идее ещё лучше, чем при использовании арифметического кодирования. Мне это видится неплохим вариантом на замену JPEG с арифметическим кодированием.
Процесс пережатия jpeg<>jpegxl уже сейчас можно попробовать через утилиту Brunsli (обещают 22%), в целом пока польза от этой утилиты такая же, что и от Packjpg, Dropbox Lepton,StuffIt, WinZip, и ImageMagic/arithmeticjpeg. Кстати, ежегодное сравнение подобных утилит здесь было www.squeezechart.com (но уже 2 года не обновляется).
Оно будет во много раз полезнее, когда появится поддержка в браузерах. Вот совсем недавно разработчики Chromium выразили явное намерение реализовать поддержку.
А так ли актуальна многопоточность при работе с JPEG? Обычно же стоит задача быстро обработать пачку JPEG-изображений, а не одно изображение. Поэтому проще использовать эффективный однопоточный декодировщик, а распараллеливать обработку на уровне отдельных изображений.
Вот результаты этого испытания.
Неплохо бы ещё размер изображения указать. Если это 1200×500 (размер изображения статье), то скорость работы на порядок ниже, чем у остальных реализаций. Тот же libjpeg-turbo
на более-менее современном процессоре выдаёт порядка 150-200 Мпикс/сек, у вас же получается только 10 МПикс/сек в 6-поточном режиме.
Поэтому проще использовать эффективный однопоточный декодировщик
проще — да, лучше — вряд ли. берем мобильные девайсы — чем больше ядер задействуем, тем энергоэффективнее решится задача. да, пользователю по барабану, будет ли картинка декодироваться 3мс или 30мс. но не по барабану, сколько у него останется батареи через 2 часа: 3% или 30%.
Выигрыш возможен только если задача одна, и мы отказываемся от всяких турбобустов, т.е. когда много медленных вычислителей оказываются эффективнее одного быстрого.
Но у пользователя не одна картинка, а пара десятков, плюс ещё JS и рендеринг. Короче, процессору есть, чем заняться, а не тратить ресурсы на межпотоковую синхронизацию.
На Raspberry PI 3 поток кадров с камеры 1280×960 25 FPS — не успевал сохраняться на флешку SD в реальном времени с помощью OpenCV VideoWriter, в MJPG.
Поэтому — да, вариантом решения было — читать кадры в память, и писать их параллельно 2-мя и более VideoWriter-ами.
Так что задача ускорения кодирования (с помощью распараллеливания) — актуальна. И распараллеливание с ускорением каждого кадра — имхо, лучше, чем потом синхронизировать несколько VideoWriter-ов между собой.
Ускорение JPEG-кодирования с использованием нескольких потоков