使用pil和tornado构建的tile-on-demand tile服务器

projectile的Python项目详细描述


抛射体
==========

使用PIL和Tornado构建的按需磁贴服务器。

动机
----

我们希望将高分辨率图像作为numpy存储在服务器的内存中
阵列。然后,当客户端请求特定的平铺时,我们可以将
通过切片numpy数组并使用pil写入结果来请求平铺
png通过stringio流返回到客户端。

这主要用于在研究中构建交互式可视化
我们可能希望跳过时间和/或磁盘密集型磁贴的设置
典型的磁贴服务器需要生成步骤。

演示
---

安装射弹

$pip安装射弹

从[USC-SIPI图像数据库](http://sipi.usc.edu/database/)提供测试图像:

$抛射桑弗兰

通过导航到<;http://localhost:8000/2/1/2.png>;手动请求特定磁贴。

在演示客户端中导航到<;http://localhost:8000/>;尝试缩放和平移。

使用

$投射一些图像.tiff

或者,如果numpy`.npy`文件中有数据,

$投射一些图像.npy

以灰度模式加载图像并应用颜色映射:

$射弹——模式L——CMAP Viridis五角大楼

压力测试
-----

要测试按需平铺的性能限制,请下载此
[英国高分辨率地图](https://commons.wikimedia.org/wiki/file:a_new_map_of_great_britain_according_the_最新和最精确观测(8342715024.jpg)
(8150×13086像素,文件大小:102.74 MB),来自WikiMedia Commons。

灰度性能测试:

$抛射英国.jpg-m l

运行颜色时降低平铺分辨率:

$projection britain.jpg—瓷砖尺寸128

依赖关系
----

-`numpy>;=1.13.3`
-`枕头>;=4.3.0`
-`Tornado>;=4.5.2`
-`matplotlib>;=2.1.0`

原料药
---

URL方案

服务器将在

/<;z>;/<;x>;/<;y>;/<;s>;.png

其中`<;z>;`是缩放级别,`<;x>;`和`<;y>;`指定
该缩放级别的平铺(`0/0`是左上角的平铺,`<;s>;`指定
图像平铺分辨率(像素)(必须是2的幂)。

服务器将在

/<;z>;/<;x>;/<;y>;/<;s>;/<;cmap>;/<;vmin>;/<;vmax>;.png

其中,'<;cmap>;'是matplotlib颜色映射的名称,'<;vmin>;'和'<;vmax>;'`
指定根据
colormap(超出此范围的像素值将被剪裁)。

使用自定义客户端

如果您喜欢射弹后端,但只想使用一个简单的自定义客户机
包含在单个html文件“custom_client.html”中,您可以运行

$projection array.npy—客户机自定义\客户机.html

让Projection服务于您的客户,而不是附带的演示客户。
< BR> >在你现有的龙卷风网络应用中使用弹丸

核心功能在中定义的“tilehandler”类中公开
[server.py](projection/server.py),您可以在自己的龙卷风网络中使用它
应用程序:

``Python
来自Tornado导入网站
从projection.server导入tilehandler



app=web.应用程序([
(r'/([0-9]+)/([0-9]+)/([0-9]+)/([0-9]+).png',提尔汉德勒,
dict(数组=数组)),

])


```

启动从您自己的python代码中抛出

还可以使用“run()”函数从自己的python代码启动服务器
在[server.py]中定义(射弹/server.py):

``Python
从projection.server导入运行

运行(数组)
```

学分
------

演示客户端从http://bl.ocks.org/mbostock/5914438>;中删除,并使用
添加一个小的筛选检查,以防止客户端请求磁贴
超出图像边界。


欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java连接usb到uart设备到安卓设备>3.1   可以强制Php中的web应用程序与Java中的桌面应用程序一起工作吗?   java为什么自定义系统类加载器不工作?   数组在Java中解析具有多个分隔符的字符串   PMD Java 8德米特定律   JavaSpringMVC表单验证不适用于嵌套的复杂类型   让Eclipse Java组织导入以使用Google checkstyle   java Appium:无法创建新会话   java如何在数组中声明新字段   java如何解决“无法初始化类org.apache.cassandra.config.DatabaseDescriptor”?   java AsyncTask创建socket   java向@CreatedBy添加更多信息   如何在ubuntu中运行包含大量jars依赖项的java文件   java如何使用<s:select>标记并在中休眠来填充下拉列表?   java获取错误:找不到符号变量“level”和“next_level_button”   javaweb应用中基于UI的ajax显示代码流   Java长到MySql   java JvisualVM:奇怪的应用程序行为   ubuntu将Java程序的输出结果保存到一个文件中