[gdal-dev] Question on TIFF compression alternatives

Even Rouault even.rouault at spatialys.com
Fri Oct 14 03:09:49 PDT 2016


Le vendredi 14 octobre 2016 09:45:38, Neumann, Andreas a écrit :
> Hi,
> 
> I have a question on TIFF compression alternatives.
> 
> My data of concern is 8bit gray value. Lots of white pixel (>95%), the
> rest is black pixels (content) and some gray pixels because of
> antialiasing.
> 
> I would like to compress to save some storage, but I need a good
> performance. What is the recommended compression that is fast on
> decompression?
> 
> I tried DEFLATE, but it is rather slow to decompress. Would LZW or
> PACKBITS be preferred in this situation? How about LZMA? I would like to
> avoid non-compressed data, because I use SSD storage for performance
> reasons.

My findings on a 37614 x 18816  8 bit image (a scan of a text page) that should 
be similar to what you describe.

Decompression time is the result of the second run of "time gdalinfo -
checksum" (so you can consider that I/O is cached by the OS and you measure 
essentially CPU time. storage is spinning disk)

No tiling:

Size			Compression			Decompression time
707895750	out_nocompression.tif	9.3 s

11239972	out_deflate.tif			10.8 s
17749306	out_lzw.tif				10.5 s
12337710	out_lzma.tif			12.6 s
36201320	out_packbits.tif			9.9 s

Tiling:

Size			Compression			Decompression time
 8813833		out_deflate_tiled.tif		11.1 s
14614121	out_lzw_tiled.tif			11.0 s
 8479238		out_lzma_tiled.tif		13.0 s
37018470	out_packbits_tiled.tif		10.2 s

Note: in the tiling case, the gdalinfo -checksum benchmark might not be ideal 
as it proceeds line by line (and not block by block), thus there's a lot of 
copying between cached blocks and output buffer that is done.

So I've done time gdal_translate XXX.tif /vsimem/out.tif -q :

deflate tiled:	2.5 s
lzw tiled:		2.3 s
packbits tiled: 	1.5 s
lzma tiled:		4.5 s

Times for non tiled files are essentially the same.


Note: if you use tiling and you have whole tiles that are at white value, if 
you use GDAL trunk, set the SPARSE_OK=YES creation option and set the nodata 
value to 255, then those tiles will be entirely omitted from the compressed 
file. This might save a few extra bytes, and also some decompression time.

gdal_translate out_nocompression.tif out_packbits_tiled.tif -co tiled=yes  -co 
compress=packbits
gdal_translate out_nocompression.tif out_packbits_tiled_sparse.tif -co 
tiled=yes -a_nodata 255 -co compress=packbits -co sparse_ok=yes

37018470	out_packbits_tiled.tif
30409074	out_packbits_tiled_sparse.tif

time gdal_translate out_packbits_tiled_sparse.tif /vsimem/out.tif -q: 1.3 s

Even

-- 
Spatialys - Geospatial professional services
http://www.spatialys.com


More information about the gdal-dev mailing list