README
changeset 28 094893cdbab7
child 29 88691556661f
equal deleted inserted replaced
27:e5c5a89d8308 28:094893cdbab7
       
     1 pngtile
       
     2 
       
     3 Constant-time/memory tile-based handling of large PNG images.
       
     4 
       
     5 ABOUT:
       
     6     pngtile is a library (and associated command-line utility) offering efficient random access to partial regions of
       
     7     very large PNG images (gigapixel range).
       
     8 
       
     9     For this purpose, the library linearly decodes the PNG image to an uncompressed memory-mapped file, which can then
       
    10     be later used to encode a portion of this raw pixel data back into a PNG image.
       
    11 
       
    12     Additionally, the library contains a thread pool for doing asynchronous tile render operations in parallel.
       
    13 
       
    14 
       
    15 NOTES:
       
    16     The command-line utility is mainly intended for maintining the image caches and testing, primary usage is expected
       
    17     to be performed using the library interface directly. A simple Cython wrapper for a Python extension module is
       
    18     provided under python/.
       
    19 
       
    20     There is a separate project that provides a web-based tile viewer using Javascript (implemented in Python as a
       
    21     WSGI application).
       
    22 
       
    23 COMPILING:
       
    24     The library depends on libpng and pthreads. The code was developed and tested using:
       
    25 
       
    26         * libpng 1.2.15~beta5-3ubuntu0.1
       
    27         * NPTL 2.7 (glibc 2.7-10ubuntu5)
       
    28 
       
    29     To compile, simply execute
       
    30 
       
    31         make
       
    32 
       
    33     The libpngtile.so will be placed under lib/, and the 'util' binary under bin/.
       
    34 
       
    35 USAGE:
       
    36     Store the .png data files in a directory. You must have write access to the directory when updating the caches,
       
    37     which are written as a .cache file alongside the .png file.
       
    38 
       
    39     Provide any number of *.png paths as arguments to the ./bin/util command. Each will be opened, and automatically
       
    40     updated if the cache doesn't exist yet, or is stale:
       
    41 
       
    42         ./bin/util -v data/*.png
       
    43 
       
    44     To render a tile from some image, provide appropriate -W/-H and -x/-y options to ./bin/util:
       
    45         
       
    46         ./bin/util data/*.png -W 1024 -H 1024 -x 8000 -y 4000
       
    47 
       
    48     The output PNG tiles will be written to temporary files, the names of which are shown in the [INFO] output.
       
    49 
       
    50 
       
    51 
       
    52     To force-update an image's cache, use the -U/--force-update option:
       
    53 
       
    54         ./bin/util --force-update data/*.png
       
    55 
       
    56     To change the number of threads used for tile-render operations, use -j/--threads:
       
    57         
       
    58         time ./bin/util -q data/* -W 4096 -H 4096 -x 8000 -y 4000 -j 1
       
    59         > real    0m3.866s
       
    60         
       
    61         time ./bin/util -q data/* -W 4096 -H 4096 -x 8000 -y 4000 -j 4
       
    62         > real    0m1.463s
       
    63 
       
    64         (measured on an Intel Core 2 Duo, compiled without optimizations)
       
    65     
       
    66 
       
    67 TODO/BUGS:
       
    68     At this stage, the library is primarily designed to handle a specific set of PNG images, and hence does not support
       
    69     all aspects of the PNG format, nor any other image formats.
       
    70 
       
    71     Cache updated operations are not executed using the thread pool.
       
    72 
       
    73     The pt_images opened by main() are not cleaned up before process exit, due to the asynchronous nature of the tile
       
    74     render operation's accesses to the underlying pt_cache object.
       
    75