Войти
ДельфинарийСтатьи

Боян и лесопед - свой JPEG

Автор:

Качаем

Вот проперло меня забахать свою реализацию небезызвестного алгоритма.
В инете существует огромное количество сайтов, рассказывающих как это делается на пальцах, но вот с примерами беда. Есть НВидевская либа - мегабайт исходников, есть лазарусовская, видать переписанная с интеловской - примерно такой же объем и что самое главное нифига не понятно=)

Короче выкладываю свой пример. 1400 строчек кода в двух файлах без единого использования других модулей, даже Windows=)
Это пожалуй единственный плюс. По скорости код не оптимизировался вообще, что бы не скрывать последовательность действий:

 1. Переход из RGB в YCbCr
 2. Сегментация
 3. Дискретно косинусное преобразование (ДКП)
 4. Квантование
 5. Зиг-заг сканирование с паковкой
 6. RLE сжатие
 7. Паковка в массив

 8. Кодирование всего что получилось Хаффманом
Ну и соответвенно в обратном порядке.

характеристики

  • При сжатии без видимых потерь - от 5 до 15 раз
  • При сохранении высокого качества картинки, жмет от 2 до 6 раз хуже обычного jpg
  • Полученый файл, в зависимости от размера и пестрости картинки, жмется WinRar'ом на максимальных настройках от -5% до +38%
  • что плохо

  • Размеры картинки должны быть кратны 8. Иначе остаток заполняется черным цветом.
  • RLE по сути нету. Длинная последовательность нулей получается только в конце линии. Поэтому жмется только она.
  • В JPEG видимо используется переменная матрица квантования, у меня три. По одной на каждый компонент цвета. (Y, Cb, Cr)
  • Хаффман использует байтовый словарь.
  • 25 июня 2006 (Обновление: 14 июля 2006)