Wie zeichnen Sie halbtransparente Polygone mit der Python Imaging Library?Zeichnen von halbtransparenten Polygonen in PIL
Antwort
Können Sie das Polygon auf einem separaten RGBA-Bild zeichnen, dann verwenden Sie die Image.paste (Bild, Box, Maske) Methode?
Bearbeiten: Das funktioniert.
from PIL import Image
from PIL import ImageDraw
back = Image.new('RGBA', (512,512), (255,0,0,0))
poly = Image.new('RGBA', (512,512))
pdraw = ImageDraw.Draw(poly)
pdraw.polygon([(128,128),(384,384),(128,384),(384,128)],
fill=(255,255,255,127),outline=(255,255,255,255))
back.paste(poly,mask=poly)
back.show()
denke ich @Nick T ‚s Antwort ist gut, aber man muss vorsichtig sein, wenn seinen Code geschrieben mit einem sehr großen Hintergrundbild verwenden, vor allem in dem Fall, dass Sie mehrere Anmerkungen versehen werden können, Polygone auf dem Bild. Dies ist etwas, das ich mache, wenn ich riesige Satellitenbilder mit einem Objekt-Erkennungscode verarbeite und die Erkennungen mit einem transparenten Rechteck annotiere. Um den Code effizient zu machen, egal wie groß das Hintergrundbild ist, mache ich den folgenden Vorschlag.
Ich würde die Lösung ändern, um anzugeben, dass das Polygonbild, das Sie einfügen, nur so groß wie erforderlich ist, um das Polygon zu halten, nicht die gleiche Größe wie das Hintergrundbild. Die Koordinaten des Polygons werden in Bezug auf den lokalen Begrenzungsrahmen angegeben, nicht die globalen Bildkoordinaten. Dann fügen Sie das Polygonbild am Versatz im größeren Hintergrundbild ein.
import Image
import ImageDraw
img_size = (512,512)
poly_size = (256,256)
poly_offset = (128,128) #location in larger image
back = Image.new('RGBA', img_size, (255,0,0,0))
poly = Image.new('RGBA', poly_size)
pdraw = ImageDraw.Draw(poly)
pdraw.polygon([ (0,0), (256,256), (0,256), (256,0)],
fill=(255,255,255,127), outline=(255,255,255,255))
back.paste(poly, poly_offset, mask=poly)
back.show()
Verwenden die Image.paste (Bild, Box, Maske) Methode wird den Alpha-Kanal in dem eingefügten Bereich des Hintergrundbildes in den entsprechenden Transparenzwert des Polygon-Bildes konvertieren.
Die Image.alpha_composite (im1, im2) Methode verwendet den Alpha-Kanal des "eingefügten" Bildes und wird den Hintergrund nicht transparent machen. Diese Methode benötigt jedoch erneut zwei gleich große Bilder.
- 1. Zeichnen von Polygonen in Swift
- 2. Android zeichnen Bitmap auf Polygonen
- 3. Verwenden von Zeichnen in PIL/TKinter
- 4. Python PIL - Zeichnen Kreis
- 5. Zeichnen mehrsprachigen Text mit PIL
- 6. pil python multiple Bild unabhängig zeichnen
- 7. Was ist der schnellste Motor zum Zeichnen einer großen Anzahl von halbtransparenten Triangen?
- 8. Griff, wenn das Zeichnen von Polygonen in Google Maps abgeschlossen ist api v3
- 9. r Punkte in Polygonen
- 10. Kreuzung von zwei konvexen Polygonen
- 11. Nächste Punkte von zwei Polygonen
- 12. Verwenden von Pixelschriftarten in PIL
- 13. Suchen von Polygonen in geo_shape Abfrage elasticsearch
- 14. Anzeigen von Polygonen in Google Maps vom SQL Server-Datentyp
- 15. md5 von pil objekt
- 16. Problem mit SQLGeography STUnion & innere Ringe zum Zeichnen von Polygonen auf Bing Maps WPF Steuerelement
- 17. Konvertieren von PIL GdkPixbuf
- 18. Problem mit dem Zeichnen von Polygonen auf einem Google Maps Anzeigen auf Android
- 19. iPhone SDK: So zeichnen Sie ein abgerundetes Rechteck mit einem halbtransparenten Farbverlauf und einem Schlagschatten
- 20. numpy Meshgrid zu formschönen Polygonen
- 21. Abrufen von Punkten von Polygonen erstellt von cvApproxPoly()
- 22. von PIL import Image - ImportError: Kein Modul namens PIL
- 23. Erhalten einfache Polygonen
- 24. SpatialPolygons - Erstellen einer Reihe von Polygonen in R von Koordinaten
- 25. GLSL - Front gegen Rückseiten von Polygonen
- 26. Zusammenführen von berührten Polygonen mit falschem Ergebnis
- 27. PIL schneidet oben von Buchstaben
- 28. Merging eine Liste von Polygonen zu Multipolygone
- 29. Ändern von Rasterwerten mit räumlichen Polygonen
- 30. Farbe von PIL Cropping/thumbnailing