2015-05-02 6 views
2

Привет, ребята, мне нужна помощь с уровнями сжатия, используя zlib. Я пытаюсь закодировать приложение для игры, которая имеет сжатие zlib для файлов.сжатие zlib больше максимального сжатия

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

Мое приложение закодировано в C#. Я попытался использовать zlib.net, а также пространство имен system.io.compression, но оба они не сжимают файлы даже при максимальном сжатом задании.

Для пространства имен System.IO.Compression Я указываю CompressionLevel.Optimal.

Для zlib.net Я указываю zlib.zlibConst.Z_BEST_COMPRESSION.

Я прикрепляю файлы ниже, я включил исходный файл, а также файлы, сжатые с помощью zlib.net и system.io.compression.

Спасибо за любую помощь, оказываемую:

Скачать файлы здесь: http://www13.zippyshare.com/v/j7EsgTDo/file.html

+1

различные реализации будет производить различные результаты. ожидается, что –

ответ

1

я был в состоянии точно дублировать ваши 000C_original_file.zlib путем сжатия распакованные данные с помощью инструмента командной строки gzip -9, а затем rewrapping сжатые данные путем удаления заголовка Gzip и прицепа и rewrapping его с заголовком ZLIB и прицепом. Это почти наверняка, как был сделан оригинал.

Как предположил @usr, вы можете использовать Zopfli для повторного сжатия, чтобы получить что-то меньшее. Я использовал pigz -11z для сжатия в формате zlib с использованием Zopfli (уровень сжатия 11), где результат был меньше вашего исходного, 3863127 байт против 3942494 для оригинала.

+0

Фактически, большинство изображений на ftp://ftp.simplesystems.org/pub/png/images/png были сделаны в начале 1995 года. Они предшествовали zlib и libpng. К сожалению, мне пришлось уничтожить мое программное обеспечение для написания PNG из-за проблем с лицензированием совместимости (gzip был GPL, и моя работа в качестве федерального сотрудника была обязательно общественным достоянием). К счастью, libpng и zlib стали доступны к маю 1995 года, поэтому я начал с них. –

1

Есть инструменты, доступные в Интернете, чтобы Минимизировать ZIP файлы (и выкачать потоки). Например, есть «Zopfli». Если вам нужно выжать последние байты из потока Deflate после его обработки, используя один из этих инструментов. Вам нужно будет использовать Process.Start, чтобы запустить инструмент minifier.

0

Возможно, стоит отметить, что поддержка сжатия ZIP/Deflate в приложении 7Zip обычно превосходит старые версии Deflate, поддерживая при этом совместимость с ними (все еще может быть распакован с более старыми версиями. Не все реализации Deflate равны.

Также обратите внимание, что классы System.IO.Compression.GZipStream драм DeflateStream реализации Deflate без каких-либо данных заголовка (чистый алгоритм выкачать без без поддержки любого формата архива).

+1

И Zopfli сжимается до дефлятного формата даже лучше, чем 7Zip/liblzma, хотя он медленнее. –

Смежные вопросы