Существует ли более быстрое сжатие с потерями, чем JPEG?
Есть ли алгоритм сжатия, который работает быстрее, чем JPEG, но хорошо поддерживается? Я знаю о jpeg2000, но из того, что я слышал, на самом деле не так много быстрее.
Редактировать: для сжатия.
Edit2: он должен работать на 32-битной Linux и в идеале он должен быть на C или C++.
6 ответов
Jpeg кодирование и декодирование должно быть очень быстрым. Вам будет трудно найти более быстрый алгоритм. Если это медленно, ваша проблема, вероятно, не в формате, а в плохой реализации кодера. Попробуйте кодировщик из libavcodec
в ffmpeg
проект.
У вас есть инструкции MMX/SSE2 на вашей целевой архитектуре? Если это так, вы можете попробовать libjpeg-turbo. Кроме того, вы можете сжать изображения с чем-то вроде zlib
а потом переложить фактическое сокращение на другую машину? Обязательно, чтобы фактическое сжатие изображений с потерями имело место на самом встроенном устройстве?
JPEG2000 не быстрее вообще. Это кодирование или декодирование, которое не достаточно быстро с JPEG? Вероятно, вы могли бы быть намного быстрее, выполнив только 4x4 FDCT и IDCT на jpeg.
Трудно найти какую-либо документацию по IJG libjpeg, но если вы воспользуетесь этим, попробуйте снизить настройку качества, это может сделать его быстрее, а также, кажется, есть опция FDCT.
Кто-то упомянул libjpeg-turbo, который использует инструкции SIMD и совместим с обычным libjpeg. Если это вариант для вас, я думаю, вы должны попробовать.
В каком контексте? На ПК или портативном устройстве?
Исходя из моего опыта, у вас есть JPEG, JPEG2000, PNG и... ну, вот и все для "хорошо поддерживаемых" типов изображений в широком контексте (с потерями или нет!)
(Ура, что GIF находится на выходе.)
Я думаю, что алгоритмы сжатия на основе вейвлетов обычно медленнее, чем алгоритмы, использующие DCT. Может быть, вам стоит взглянуть на форматы JPEG XR и WebP.
Вы можете просто изменить размер изображения на меньшее, если вам не требуется полная точность изображения. Усреднение каждого блока 2x2 в один пиксель очень быстро уменьшит размер до 1/4.