Comment dessinez-vous des polygones transparents avec Python?
Je suis à l'aide de PIL (Python Imaging Library). Je voudrais attirer l'transparent polygones. Il semble que le fait de spécifier une couleur de fond qui comprend alpha niveau ne fonctionne pas. Leurs solutions de contournement?
Si elle ne peut pas être fait à l'aide de PIL, je suis prêt à utiliser quelque chose d'autre.
Si il n'y a plus qu'une solution, alors que les performances devraient être pris en compte. Le dessin doit être aussi rapide que possible.
source d'informationauteur carrier
Vous devez vous connecter pour publier un commentaire.
C'est pour Oreiller, une plus maintenu fourche de PIL. http://pillow.readthedocs.org/
Si vous voulez dessiner des polygones qui sont transparentes, les uns par rapport aux autres, l'Image de base doit être de type RVB, pas RGBA, et la ImageDraw doit être de type LED. Exemple:
Cela attirera deux triangles qui se chevauchent avec leurs deux couleurs de mélange. Beaucoup plus rapide que d'avoir à en composite de plusieurs "couches" pour chaque polygone.
Ce que j'ai eu à le faire lors de l'utilisation de la LIP à dessiner des images transparentes est de créer un calque de couleur, l'opacité de la couche avec le polygone dessiné sur elle, et du compositing avec la couche de base de la manière suivante:
Lors de l'utilisation de l'Image.Mélange j'ai eu des problèmes avec d'étranges décrivant des comportements sur la polygones.
Le seul problème avec cette approche est que le rendement est catastrophique lors de l'élaboration d'un grand nombre de taille raisonnable, des polygones. Beaucoup plus rapide solution serait quelque chose comme "manuellement" le polygone sur un tableau numpy représentation de l'image.
Je suis en utilisant le caire + pycairo pour cela, et il fonctionne bien.
Et vous pouvez partager des données d'image entre le DIP et le caire, à l'aide de python tampon d'interface, si il y a opération de paiement tenant lieu d'indemnité qui ne peut être fait au caire.
PIL de l'Image module fournit un mélange de méthode.
Créer une seconde image de la même taille que votre première, avec un arrière-plan noir. Dessinez votre polygone (avec couleur). Puis l'appel de l'Image.mélange de passage les deux images et un alpha. Elle retourne une troisième image, qui devrait avoir un effet semi-transparent polygone.
Je n'ai pas mesuré les performances (hey, je n'ai même pas essayé!) donc, je ne peux me prononcer sur sa pertinence. Je vous suggère de travailler sur votre budget de performances, puis à mesurer pour voir si elle est assez rapide à vos fins.
De ce que j'ai trouvé, il ne peut pas être fait directement avec PIL. Voici une solution avec PyCairo. Le caire est également utilisé par Mozilla, GTX+, Mono, Inkscape, et WebKit, donc je pense qu'il est sûr à utiliser dans les conditions de l'avenir. Il peut également être fait avec aggdraw, une option à ajouter pour PIL. Voir mon énumérés à la source pour plus de détails. Une version de Python 2.7.3 est utilisé.
Source: http://livingcode.org/2008/12/14/drawing-with-opacity.1.html
Helper fichier: random_polys_util.py
Fichier principal: random_polys.py
J'ai eu à dessiner un à l'extérieur du polygone avec un contour, et soustraire intérieur des polygones (une opération courante dans le SIG). Fonctionne comme un charme utilisation de la couleur
(255,255,255,0)
.