Есть некоторый байтовый массив, содержащий картинку. Стоит задача — сжать эту картинку в jpeg с максимальным возможным качеством, имея заданное ограничение на максимальный размер файла.
Как лучше решать такую задачу? Подскажите плиз правильное направление.
Здравствуйте, sysif, Вы писали:
S>Доброго времени суток!
S>Есть некоторый байтовый массив, содержащий картинку. Стоит задача — сжать эту картинку в jpeg с максимальным возможным качеством, имея заданное ограничение на максимальный размер файла. S>Как лучше решать такую задачу? Подскажите плиз правильное направление.
Если есть возможность залезть внутрь алгоритма, то передавать сначала наиболее низкочастотные коэффициенты, а потом набивать до нужного размера более высокочастотными.
Здравствуйте, sysif, Вы писали:
s> Как лучше решать такую задачу? Подскажите плиз правильное направление.
Для jpeg2000 есть реализации в которых устанавливается конечный размер стрима, а коэффициенты упаковки высчитываются уже на этом основании.
Для обычного Jpeg такого нет. Можно попробовать подобрать примерные уровни компрессии для того или иного конечного размера файла, но результаты все равно будут "плавать" т.к. выход еще и от изображения сильно зависит.
Здравствуйте, sysif, Вы писали:
S>Доброго времени суток!
S>Есть некоторый байтовый массив, содержащий картинку. Стоит задача — сжать эту картинку в jpeg с максимальным возможным качеством, имея заданное ограничение на максимальный размер файла. S>Как лучше решать такую задачу? Подскажите плиз правильное направление.
jpeg2000 может.
Для jpeg — итерациями: пакуем в память; смотрим размер; подкручиваем коэффициент сжатия. Так, навскидку, итераций много не потребуется, по скорости все не намного превысит итоговую физическую запись результата на диск.
Здравствуйте, sysif, Вы писали:
S>Есть некоторый байтовый массив, содержащий картинку. Стоит задача — сжать эту картинку в jpeg с максимальным возможным качеством, имея заданное ограничение на максимальный размер файла. S>Как лучше решать такую задачу? Подскажите плиз правильное направление.
В IrfanView есть подобная фича — по крайней мере можете поэкспериментировать — надо ли оно вам вообще будет в таком виде
S>>Есть некоторый байтовый массив, содержащий картинку. Стоит задача — сжать эту картинку в jpeg с максимальным возможным качеством, имея заданное ограничение на максимальный размер файла. S>>Как лучше решать такую задачу? Подскажите плиз правильное направление.
D>Если есть возможность залезть внутрь алгоритма, то передавать сначала наиболее низкочастотные коэффициенты, а потом набивать до нужного размера более высокочастотными.
Не все так просто, там после этого еще lossless сжатие применяется
Здравствуйте, LelicDsp, Вы писали:
D>>Если есть возможность залезть внутрь алгоритма, то передавать сначала наиболее низкочастотные коэффициенты, а потом набивать до нужного размера более высокочастотными. LD>Не все так просто, там после этого еще lossless сжатие применяется
В котором коэффициенты уже в нужном порядке записаны. Если аккуратно отрезать, то может получиться, но в такие дебри топикстартер вряд ли собирался.