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