Сжатие с лучшим соотношением в Python? - PullRequest
6 голосов
/ 25 октября 2010

Какой метод сжатия в Python имеет наилучшую степень сжатия?

Является ли обычно используемый zlib.compress() лучшим или есть лучшие варианты?Мне нужно получить максимально возможную степень сжатия.

Я сжимаю строки и отправляю их по UDP.Типичная строка, которую я сжимаю, имеет около 1 700 000 байтов.

Ответы [ 3 ]

7 голосов
/ 25 октября 2010

Я уверен, что могут быть некоторые неясные форматы с лучшим сжатием, но lzma - лучший из тех, которые хорошо поддерживаются.Здесь есть некоторые привязки Python здесь .

EDIT

Не выбирайте формат без тестирования, некоторые алгоритмы работают лучше в зависимости от набора данных.

4 голосов
/ 25 октября 2010

Если вы хотите обменять производительность на сжатие геттера, то библиотека bz2 обычно дает лучшие результаты, чем библиотека gz (zlib).

Существуют и другие библиотеки сжатия, такие как xz (LZMA2), которые могут дать еще лучшие результаты, но их нет в основном дистрибутиве python.

Python Doc для класса BZ2

РЕДАКТИРОВАТЬ: В зависимости от типа изображения, вы можете не получить много дополнительного сжатия.Многие форматы изображений предварительно сжимаются, если только они не являются сырыми, bmp или несжатыми.Настоятельно рекомендуется проводить тестирование между различными типами сжатия.

EDIT2: Если вы решили сделать сжатие изображения.Image Magick поддерживает привязки Python и многие типы преобразования изображений.

Image Magick

Поддерживаемые форматы изображений

1 голос
/ 25 октября 2010

Лучший алгоритм сжатия определенно зависит от типа данных, с которыми вы имеете дело.Если вы не работаете со списком случайных чисел, хранящихся в виде строки (в этом случае алгоритм сжатия no не будет работать), знание типа данных обычно позволяет применять гораздо лучшие алгоритмы, чем алгоритмы общего назначения (см. Другиехорошо готовые к использованию общие алгоритмы сжатия).

Если вы работаете с изображениями, вам определенно следует выбрать формат сжатия с потерями (т.е. с поддержкой пикселей), предпочтительно любой формат без потерь.Это даст вам гораздо лучшие результаты.Повторное сжатие с форматом без потерь поверх формата с потерями - это потеря времени.

Я бы поискал в PIL , чтобы посмотреть, что я могу использовать.Что-то вроде преобразования изображения в JPEG с коэффициентом сжатия, совместимым с исследуемым качеством, перед отправкой должно быть очень эффективным.

Вы также должны быть очень осторожны, если при использовании UDP он может потерять некоторые пакеты, и большинство форматов сжатия очень разумнык отсутствующим частям файла.ХОРОШО.Этим можно управлять на уровне приложений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...