PIL: alpha-transparente Bilder übereinander legen
Verfasst: Dienstag 13. Januar 2009, 20:53
Hallo,
ich suche verzweifelt nach einer Lösung in Python transparente PNG-Bilder übereinander zu legen. Ich habe mehrere alpha-transparente PNG-24 Bilder, aus denen ich dynamisch ein Bild zusammen bauen und speichern möchte. Das ganze hatte ich mir so vorgestellt, dass ich die einzelnen Bilder wie Ebenen in Photoshop & Co. übereinander legen kann.
Mit der paste()-Funktion der Image-Klasse habe ich das ganze auch annähernd so hinbekommen, jedoch mit einem kleinen Seiteneffekt:
Lege ich Bild A (teilweise transparent) über Bild B (solider Hintergrund, keine Transparenz), dann scheint das Gesamtbild an den Stellen durch, an denen Bild A eine Transparenz aufwies, d.h. die Bilder werden schon soweit übereinander gelegt, jedoch "radiert" die Transparenz von Bild A den Inhalt von Bild B aus. Ich will jedoch am Hintergrund nichts veränderm, lediglich Bild A "drüber legen".
Ich habe schon viel mit dem dritten Parameter (mask) der paste()-Funktion und mit der composite()-Funktion rumgespielt, erhielt jedoch nie den gewünschten Effekt. Ich würde mich sehr freuen, wenn mir jemand sagen kann wie das geht.
Cheerz,
JM
ich suche verzweifelt nach einer Lösung in Python transparente PNG-Bilder übereinander zu legen. Ich habe mehrere alpha-transparente PNG-24 Bilder, aus denen ich dynamisch ein Bild zusammen bauen und speichern möchte. Das ganze hatte ich mir so vorgestellt, dass ich die einzelnen Bilder wie Ebenen in Photoshop & Co. übereinander legen kann.
Mit der paste()-Funktion der Image-Klasse habe ich das ganze auch annähernd so hinbekommen, jedoch mit einem kleinen Seiteneffekt:
Lege ich Bild A (teilweise transparent) über Bild B (solider Hintergrund, keine Transparenz), dann scheint das Gesamtbild an den Stellen durch, an denen Bild A eine Transparenz aufwies, d.h. die Bilder werden schon soweit übereinander gelegt, jedoch "radiert" die Transparenz von Bild A den Inhalt von Bild B aus. Ich will jedoch am Hintergrund nichts veränderm, lediglich Bild A "drüber legen".
Ich habe schon viel mit dem dritten Parameter (mask) der paste()-Funktion und mit der composite()-Funktion rumgespielt, erhielt jedoch nie den gewünschten Effekt. Ich würde mich sehr freuen, wenn mir jemand sagen kann wie das geht.
Code: Alles auswählen
canvas = Image.new('RGBA', (100,100), (0,0,0,0))
bgr = Image.new('RGB', (100,100), (255,0,0))
transp_layer = Image.open('alphatransparentesbild.png')
canvas.paste(bgr, (0,0))
canvas.paste(transp_layer, (0,0), transp_layer)
canvas.save(...)
JM