A tile-on-demand tile server built with PIL and Tornado
Project description
projectile
==========
A tile-on-demand tile server built with PIL and Tornado.
Motivation
----------
We want to store a high-resolution image in memory on the server as a numpy
array. Then when a client requests a particular tile, we can make the PNG of the
requested tile by slicing the numpy array and using PIL to write the resulting
PNG back to the client through a StringIO stream.
Demo
----
Install projectile
$ pip install projectile
Serve a test image from the [USC-SIPI Image Database](http://sipi.usc.edu/database/):
$ projectile sanfran
Manually request a particular tile by navigating to <http://localhost:8000/2/1/2.png>.
Try zooming and panning in the demo client by navigating to <http://localhost:8000/>.
Serve one of your own images with
$ projectile some_image.tiff
or, if you have data in a numpy `.npy` file,
$ projectile some_image.npy
Dependencies
------------
- `numpy>=1.13.3`
- `Pillow>=4.3.0`
- `tornado>=4.5.2`
- `six>=1.11.0`
API
---
### Using a custom client
If you like the projectile backend but just want to use a simple custom client
contained in a single HTML file `custom_client.html`, you can run
$ projectile array.npy --client custom_client.html
to make projectile serve your client instead of the included demo client.
### Using projectile in your existing Tornado web application
The core functionality is exposed in the `TileHandler` class defined in
[server.py](projectile/server.py), which you can use in your own Tornado web
applications:
```python
from tornado import web
from projectile.server import TileHandler
...
app = web.Application([
(r'/([0-9]+)/([0-9]+)/([0-9]+).png', TileHandler, dict(array=array)),
...
])
...
```
### Launching projectile from your own Python code
You can also launch a server from your own Python code with the `run()` function
defined in [server.py](projectile/server.py):
```python
from projectile.server import run
run(array)
```
Credits
-------
The demo client is lifted from <http://bl.ocks.org/mbostock/5914438>, with the
addition of a small filtering check to prevent the client from requesting tiles
which lie beyond the image boundaries.
==========
A tile-on-demand tile server built with PIL and Tornado.
Motivation
----------
We want to store a high-resolution image in memory on the server as a numpy
array. Then when a client requests a particular tile, we can make the PNG of the
requested tile by slicing the numpy array and using PIL to write the resulting
PNG back to the client through a StringIO stream.
Demo
----
Install projectile
$ pip install projectile
Serve a test image from the [USC-SIPI Image Database](http://sipi.usc.edu/database/):
$ projectile sanfran
Manually request a particular tile by navigating to <http://localhost:8000/2/1/2.png>.
Try zooming and panning in the demo client by navigating to <http://localhost:8000/>.
Serve one of your own images with
$ projectile some_image.tiff
or, if you have data in a numpy `.npy` file,
$ projectile some_image.npy
Dependencies
------------
- `numpy>=1.13.3`
- `Pillow>=4.3.0`
- `tornado>=4.5.2`
- `six>=1.11.0`
API
---
### Using a custom client
If you like the projectile backend but just want to use a simple custom client
contained in a single HTML file `custom_client.html`, you can run
$ projectile array.npy --client custom_client.html
to make projectile serve your client instead of the included demo client.
### Using projectile in your existing Tornado web application
The core functionality is exposed in the `TileHandler` class defined in
[server.py](projectile/server.py), which you can use in your own Tornado web
applications:
```python
from tornado import web
from projectile.server import TileHandler
...
app = web.Application([
(r'/([0-9]+)/([0-9]+)/([0-9]+).png', TileHandler, dict(array=array)),
...
])
...
```
### Launching projectile from your own Python code
You can also launch a server from your own Python code with the `run()` function
defined in [server.py](projectile/server.py):
```python
from projectile.server import run
run(array)
```
Credits
-------
The demo client is lifted from <http://bl.ocks.org/mbostock/5914438>, with the
addition of a small filtering check to prevent the client from requesting tiles
which lie beyond the image boundaries.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
projectile-0.0.2.tar.gz
(21.5 kB
view details)
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file projectile-0.0.2.tar.gz.
File metadata
- Download URL: projectile-0.0.2.tar.gz
- Upload date:
- Size: 21.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f2b27126971825c5dbf88268c4e99213fde22df87452fba9757482e15cbbd187
|
|
| MD5 |
1d86cbcbbdb4b5240f694c56e8e3895a
|
|
| BLAKE2b-256 |
b9e426bfb3ac34f5a71629d5a79dd96368a5a2e3f3933f477044c456c2a9e714
|
File details
Details for the file projectile-0.0.2-py2-none-any.whl.
File metadata
- Download URL: projectile-0.0.2-py2-none-any.whl
- Upload date:
- Size: 9.1 kB
- Tags: Python 2
- Uploaded using Trusted Publishing? No
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c6823778a91743c847ad59d1dc1c469f60451a44bccee8eacd959437fcfc35a8
|
|
| MD5 |
ef298190b56665feb7a49804279bbac8
|
|
| BLAKE2b-256 |
b1379e71e751fb9535fb8bd8882f8dd16fdf9b5c0c562900a5fece1f168e08e0
|