Возможно ли, что сжатие файла SWF приведет к большему файлу? - PullRequest
3 голосов
/ 26 сентября 2010

Когда я GZIP SWF-файл, размер увеличивается с 1,21 МБ до 1,86 МБ ... Итак, мой вопрос немного ответил сам.Вопрос в том, как это возможно?Я думаю, как сказал мой коллега, что SWF-файл уже является двоичным и больше не может быть сжат.

Выводы также заключаются в том, что архивирование SWF-файлов делать не следует.

Ответы [ 3 ]

5 голосов
/ 26 сентября 2010

Посмотрите на первые три магических байта SWF-файла. Если они FWS, это несжатый файл, если они CWS, они уже сжаты с помощью zLib и не могут быть сжаты в дальнейшем с помощью gZip (который также использует zLib для сжатия). Несмотря на то, что он должен увеличиться только на 50%, увеличение размера на 50% является экстремальным ...

Как правило, несжатые SWF-файлы могут быть сжаты немного, но не так сильно. Формат файла SWF очень оптимизирован и обычно генерирует очень маленькие и компактные файлы.

Кстати, если вы используете мой инструмент Precomp и инструмент, который имеет лучшее сжатие, чем gZip (например, 7-Zip ), вы также можете сжать большинство сжатых SWF немного дальше, сначала запустив Precomp для файла, а затем используя 7-Zip для получившегося файла PCF.

Это также будет обнаруживать и повторно сжимать файлы JPG внутри файлов SWF. Это также процесс без потерь и также работает для некоторых других уже сжатых типов файлов, таких как ZIP, JPG, PNG, GIF.

5 голосов
/ 26 сентября 2010

SWF уже закодирован, и это кодирование включает сжатие.Вполне возможно, что если вы собираетесь сжать уже сжатый файл, сжатие приведет к увеличению размера файла.Это происходит, например, при попытке ZIP JPEG или PNG файла.

То, что сказал ваш коллега, неверно.Есть много бинарных файлов, которые могут быть сжаты.Например, BMP файлы.

1 голос
/ 26 сентября 2010

В теории информации существует понятие, называемое энтропия , которое является своего рода мерой «истинного» объема информации в сообщении (в вашем примере сообщение является SWF-файлом).Одной из общих единиц измерения, используемой для этой меры, является бит.

Файл с 1,21 МБ занимает приблизительно 10 150 215 бит.Однако его энтропия может составлять менее 10 150 215 битов, поскольку в данных имеется некоторый порядок или предсказуемость.Допустим, вы измерили энтропию этого файла и пришли к выводу, что энтропия составляет всего 9 000 000 бит.Это означает, что вы не можете сжать его без потерь до размера менее 9 000 000 бит.

Но алгоритмы сжатия заканчивают тем, что добавили еще немного данных к сжатым файлам, чтобы они могли распаковать его позже.Алгоритмы включают некоторую информацию о виде «сокращений», сделанных при сжатии данных.Это означает, что теоретический предел, заданный энтропией, не будет достигнут из-за этих дополнительных данных, специфичных для алгоритма.

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

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