2009-10-13 9 views
2

Je crée des images personnalisées que je convertis plus tard en une pyramide d'images pour Seadragon AJAX. Les images et la pyramide d'images sont créées en utilisant PIL. Il faut actuellement quelques heures pour générer les images et la pyramide d'images pour environ 100 images qui ont une largeur et une hauteur combinées d'environ 32 000 000 par 1000 (oui, l'image est très longue et étroite). La performance est à peu près similaire à un autre algorithme que j'ai essayé (c'est-à-dire deepzoom.py). Je prévois de voir si python-gd fonctionnerait mieux car la plupart de ses fonctionnalités sont codées en C (à partir de la bibliothèque GD). Je suppose une augmentation significative de la performance mais je suis curieux d'entendre l'opinion des autres. En particulier le redimensionnement et le recadrage sont lents en PIL (w/Image.ANTIALIAS). Est-ce que cela va s'améliorer si j'utilise Python-GD?PIL vs Python-GD pour recadrer et redimensionner

Merci d'avance pour les commentaires et suggestions.

EDIT: La différence de performance entre PIL et python-GD semble minime. Je vais refactoriser mon code pour réduire les goulots d'étranglement de performance et inclure le support de plusieurs processeurs. J'ai testé le module 'multiprocessing' python. Les résultats sont encourageants.

+0

Seadragon a l'air très cool. La tâche peut-elle être répartie sur plusieurs processus ou sur plusieurs ordinateurs? –

+0

Il peut être divisé. J'espérais éviter cela parce que cela nécessite une refonte importante de mon code, mais il semble que ce soit inévitable. – Vince

Répondre

1

PIL est principalement en C.

L'antialiasing est lent. Lorsque vous désactivez l'antialiasing, que devient la vitesse?

+0

En fait essayé cela après que j'ai posté. Il est beaucoup plus rapide d'utiliser BILINEAR et donne des résultats comparables esthétiquement. De plus, les performances de la méthode de redimensionnement sont comparables entre PIL et python-GD (différence de vitesse de 10%). – Vince

0

VIPS comprend un fast deepzoom creator. J'ai chronométré deepzoom.py et sur ma machine, je vois:

$ time ./wtc.py 
real 0m29.601s 
user 0m29.158s 
sys  0m0.408s 
peak RES 450mb 

wtc.jpg est un 10 000 x 10 000 pixels image RVB JPG et wtc.py est d'utiliser these settings.

VIPS est d'environ trois fois plus vite et a besoin d'un quart de la mémoire:

$ 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 

Je ne sais pas pourquoi sys est beaucoup plus élevé.