6
votes

I am considering what level of zlib compression to use, and I am curious about the different compression rates for the different compression levels that can be specified in zlib commands. The zlib manual has the following constants for specifying the compression level:

#define Z_NO_COMPRESSION         0
#define Z_BEST_SPEED             1
#define Z_BEST_COMPRESSION       9
#define Z_DEFAULT_COMPRESSION  (-1)

Clearly, a lower the number means lower latency for compression and deflation at the cost of a less-compressed file, while a higher number favors better compression at the cost of higher latency.

My question is, what compression ratios can be expected for the different compression levels? This zlib web page says, More typical zlib compression ratios are on the order of 2:1 to 5:1 in the context of maximum compression, but are there also compression ratios / ranges for the other compression factors as well?

1
It depends quite a lot on the data that you compress. My experience is that data like JSON shrinks down to something like 10% using compression in general while data like H.264 video doesn't benefit at all.mm759
I am aware that it depends on the data, but for a given piece of data, I would imagine that you can still say "level 7 compresses the data by x less than level 8", etc. In other words, if you can give a general range for the max compression level, I'm curious to hear if ranges can be prescribed to the other compression levels as well.DIMMSum

1 Answers

11
votes

There is no answer for your question that is independent of the data. You can predict neither compression ratios, nor ratios of compression ratios just from the respective compression levels. The levels reflect how hard the compressor looks for matching strings in the previous 32K of data. That's all.