PIL: alpha-transparente Bilder übereinander legen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
juergmai
User
Beiträge: 2
Registriert: Dienstag 13. Januar 2009, 20:26

PIL: alpha-transparente Bilder übereinander legen

Beitragvon juergmai » 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.

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(...)


Cheerz,
JM
BlackJack

Beitragvon BlackJack » Dienstag 13. Januar 2009, 21:26

Das sollte so gehen, wie Du es da zeigst, also das Bild mit der Transparenz noch einmal als `mask`-Argument übergeben. Bei mir funktioniert es jedenfalls.
juergmai
User
Beiträge: 2
Registriert: Dienstag 13. Januar 2009, 20:26

Beispiel

Beitragvon juergmai » Dienstag 13. Januar 2009, 22:14

Hi BlackJack,

mir ist der Effekt beim ersten hinsehen auch nicht aufgefallen, erst als ich einen farbigen hintergrund unter das bild gelegt habe.

Hier mal zwei Bilder die mein Problem veranschaulichen sollen: http://devel.valloc.de/pil_problem.html

(Sollte eigtl. klar sein: mit IE < 7 ist da nicht viel!)
Benutzeravatar
cofi
Moderator
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Beitragvon cofi » Dienstag 13. Januar 2009, 22:17

juergmai hat geschrieben:(Sollte eigtl. klar sein: mit IE < 7 ist da nicht viel!)

Damit is eh nich viel .. SCNR

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot]