[gdal-dev] Question on TIFF compression alternatives
Even Rouault
even.rouault at spatialys.com
Fri Oct 14 04:16:03 PDT 2016
Le vendredi 14 octobre 2016 13:01:50, Neumann, Andreas a écrit :
> Hi Even,
>
> Thank you for your detailed reply.
>
> I should have added that my concern is mainly about random access to
> parts of the images - for QGIS server and QGIS Desktop.
>
> I have internal pyramids. I am not so sure if it is tiled or not.
Internal pyramids created by GDAL are tiled with tiles of 128x128 pixel (can
be changed with the GDAL_TIFF_OVR_BLOCKSIZE configuration option:
http://gdal.org/frmt_gtiff.html#overviews . But the default is generally fine)
> Does
> gdalinfo reveal whether the TIFF was created with "TILED=YES"?
If you see something "Band 1 Block=256x256" in the gdalinfo output, the full
resolution image is tiled. If the block width (the first figure after Block=) is
the image width, then it is not. You definitely want to use a tiled image for
random access.
>
> So from your analysis it looks like lzma is the slowest, but overall,
> the differences aren't that huge. I don't know how random access to
> parts of the image changes the game a bit, compared to your analysis
> where you examine the decompression of the whole image - right?
I used whole image decompression otherwise the timings would have been hard to
measure accurately. You can expect the same ratios of performance to apply to
partial image decompression.
My timing were done on "hot" runs. Depending on use cases, I/O might be the
overwhelming time.
>
> Thanks,
>
> Andreas
>
> On 2016-10-14 12:09, Even Rouault wrote:
> > 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