pngtile

module
v0.0.0-...-07b64fa Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 18, 2019 License: MPL-2.0

README

libpngtile

Constant-time/memory handling of large PNG images as smaller tiles.

  • Docker Hub docker run -v /srv/pngtile/images qmsk/pngtile
  • Demo site OpenTTD screenshots
  • Python language support (outdated)
  • Go language support

Docker

If you have some .png files in your current directory:

$ docker pull qmsk/pngtile
$ docker run --rm -v $PWD:/srv/pngtile/images -u $UID -p 9090:9090 qmsk/pngtile

The default image CMD will build the cache files, and then run the server on HTTP port 9090.

About

pngtile is a C library (and associated command-line utility) offering efficient random access to partial regions of very large PNG images (gigapixel range).

For this purpose, the library linearly decodes the PNG image to an uncompressed memory-mapped file, which can then be later used to encode a portion of this raw pixel data back into a PNG image.

Notes

The command-line utility is mainly intended for maintining the image caches and testing, primary usage is expected to be performed using the library interface directly.

A simple Cython wrapper for a Python extension module is provided under python/. A CGo wrapper is provided under go/.

There is a separate project that provides a web-based tile viewer using Javascript (implemented in Python as a WSGI application).

The .cache files are not portable across different architectures, nor are they compatible across different cache format versions.

The library supports sparse cache files. A pixel-format byte pattern can be provided with --background using hexadecimal notation (--background 0xFFFFFF - for 24bpp RGB white), and consecutive regions of that color will be omitted in the cache file, which may provide significant gains in space efficiency.

Build

The library depends on libpng. The code is developed and tested using:

  • libpng12-dev png.h (Ubuntu xenial 1.2.54-1ubuntu1)

To compile:

$ make

The libpngtile.so and pypngtile.so libraries will be placed under lib/, and the pngtile binary under bin/.

Alternatively, use the included Dockerfile to build:

$ docker build -t pngtile .

However, this is slower than desired for development purposes.

Usage

Usage: ./bin/pngtile [options] <image> [...]
Open each of the given image files, check cache status, optionally update their cache, display image info, and
optionally render a tile of each.

        -h, --help               show this help and exit
        -q, --quiet              supress informational output
        -v, --verbose            display more informational output
        -D, --debug              equivalent to -v
        -U, --force-update       unconditionally update image caches
        -N, --no-update          do not update the image cache
        -B, --background         set background pattern for sparse cache file: 0xHH..
        -W, --width      PX      set tile width
        -H, --height     PX      set tile height
        -x, --x          PX      set tile x offset
        -y, --y          PX      set tile y offset
        -z, --zoom       ZL      set zoom factor (<0)
        -o, --out        FILE    set tile output file
        --benchmark      N       do N tile renders
        --randomize              randomize tile x/y coords

Provide any number of *.png paths as arguments to the ./bin/pngtile command. Each will be opened, and automatically updated if the cache doesn't exist yet, or is stale:

pngtile -v data/*.png

You must have write access to the directory when updating the caches, which are written as a .cache file alongside the .png file.

Use -v/--verbose for more detailed output.

To render a tile from some image, provide appropriate -W/-H and -x/-y options to pngtile:

pngtile data/*.png -W 1024 -H 1024 -x 8000 -y 4000

The output PNG tiles will be written to temporary files, the names of which are shown in the [INFO] output.

To force-update an image's cache, use the -U/--force-update option:

pngtile --force-update data/*.png

Alternatively, to not update an image's cache, use the -N/--no-update option.

Issues

At this stage, the library is primarily designed to handle a specific set of PNG images, and hence does not support all aspects of the PNG format, nor any other image formats.

Directories

Path Synopsis
go

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL