PIL与Python-GD的裁剪和缩放对比
我正在制作一些自定义图片,之后把它们转换成一个图像金字塔,用于Seadragon AJAX。这个图像和图像金字塔是用PIL这个工具创建的。目前,生成大约100张图片的图像和图像金字塔大概需要几个小时,这些图片的总宽度和高度大约是32000000乘以1000(没错,这张图片非常长且窄)。性能大致和我尝试过的另一种算法差不多(比如deepzoom.py)。我打算看看使用python-gd是否会表现得更好,因为它的大部分功能都是用C语言编写的(来自GD库)。我认为性能应该会有显著提升,但我也想听听其他人的看法。特别是,PIL在调整大小和裁剪时速度比较慢(使用Image.ANTIALIAS)。如果我使用Python-GD,这个问题会有很大改善吗?
提前感谢大家的评论和建议。
编辑:PIL和python-GD之间的性能差异似乎很小。我会重构我的代码,以减少性能瓶颈,并支持多处理器。我测试了Python的'multiprocessing'模块,结果很令人鼓舞。
2 个回答
0
VIPS包含一个快速的深度缩放创建工具。我测试了deepzoom.py
,在我的电脑上看到的结果是:
$ time ./wtc.py
real 0m29.601s
user 0m29.158s
sys 0m0.408s
peak RES 450mb
这里的wtc.jpg
是一个10,000 x 10,000像素的RGB JPG图片,而wtc.py
使用的是这些设置。
VIPS的速度大约快三倍,而且只需要四分之一的内存:
$ time vips dzsave wtc.jpg wtc --overlap 2 --tile-size 128 --suffix .png[compression=0]
real 0m10.819s
user 0m37.084s
sys 0m15.314s
peak RES 100mb
我不太明白为什么sys的使用量会这么高。
1
PIL主要是用C语言写的。
抗锯齿处理比较慢。当你关闭抗锯齿功能时,速度会有什么变化呢?