PIL与Python-GD的裁剪和缩放对比

2 投票
2 回答
2353 浏览
提问于 2025-04-15 15:01

我正在制作一些自定义图片,之后把它们转换成一个图像金字塔,用于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语言写的。

抗锯齿处理比较慢。当你关闭抗锯齿功能时,速度会有什么变化呢?

撰写回答