Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/qmsk/pngtile
Gigapixel PNG tile rendering from mmap cache file
https://github.com/qmsk/pngtile
Last synced: about 1 month ago
JSON representation
Gigapixel PNG tile rendering from mmap cache file
- Host: GitHub
- URL: https://github.com/qmsk/pngtile
- Owner: qmsk
- License: mpl-2.0
- Created: 2017-07-16T11:25:54.000Z (over 7 years ago)
- Default Branch: master
- Last Pushed: 2019-10-30T07:10:21.000Z (about 5 years ago)
- Last Synced: 2024-06-20T15:52:37.746Z (7 months ago)
- Language: C
- Size: 642 KB
- Stars: 2
- Watchers: 3
- Forks: 1
- Open Issues: 5
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# libpngtile
Constant-time/memory handling of large PNG images as smaller tiles.
* [Docker Hub](https://hub.docker.com/r/qmsk/pngtile/) `docker run -v /srv/pngtile/images qmsk/pngtile`
* [Demo site](https://pngtile.qmsk.net/terom/openttd/20091218/1987#16976:13632:0) OpenTTD screenshots
* [Python](python/) language support (outdated)
* [Go](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/pngtileThe 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] [...]
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.