Transparente Bildpartien erkennen

Fragen zu Tkinter.
Antworten
schlangenbeschwörer
User
Beiträge: 419
Registriert: Sonntag 3. September 2006, 15:11
Wohnort: in den weiten von NRW
Kontaktdaten:

Hallo!

Ich würde gerne von einem .gif-Bild (oder einem anderen Format), das ich auf einem Label oder einem Canvas darstelle, über einen bestimmten Bereich wissen, ob dieser transparent ist. (Notfalls reicht auch eine pixelweise Abfrage.)
Nur wie mach ich das? Nur mit Tkinter wird das wohl nicht gehen, also
denke ich ,dass ich mir das irgedwie mit der PIL basteln muss, nur hab ich damit sogut wie keine Erfahrungen...
Bei gif-Bildern müsste ich ja, wenn ich die Position richtig errechnet habe, ja nur die Farbe mit der Tranzparenzfarbe vergleichen, oder?

Habt ihr vlt. ein paar Tips oder Links für mich?

mfg, jj
BlackJack

Einzelne Pixel ist einfach:

Code: Alles auswählen

from PIL import Image

def main():
    image = Image.open('gfx/logo.gif')
    transparent = image.info['transparency']
    if image.getpixel((0, 0)) == transparent:
        print 'Ich durchschaue Dich! :-)'
Für Bereiche könnte man die `histogram()`-Methode bemühen. Einfach das Histogramm des Bereichs berechnen und dann schauen, ob die Anzahl der Pixel insgesamt mit der am Index der transparenten Farbe übereinstimmt.

Auswahl des Bereichs kann man entweder durch ausschneiden eines rechteckigen Bereichs machen und auf dem dann das Histogramm berechnen, oder man kann der Histogram-Methode auf dem Ursprungsbild eine entsprechende Maske als Argument übergeben.
schlangenbeschwörer
User
Beiträge: 419
Registriert: Sonntag 3. September 2006, 15:11
Wohnort: in den weiten von NRW
Kontaktdaten:

Hi BlackJack,
Danke erstmal für den schnellen Tip. Das mit dem Histogram bzw. wie ich aus meinen Pixeldaten eine Maske für das Histogram bekomme, hab ich noch nicht so ganz raus. Muss ich da per PIL ein gleichgroßes Bild erstellen und das als Maske für das histogram nehmen? Ich bin mit meinem Code eh noch nicht ganz da, wo ich die Sache brauche, aber ich denke ich werd mich noch etwas mehr in die PILDoku einlesen müssen, oder ich teste nur einen Rand mit ein paar Punkten, würde eigentlich auch reichen...
Naja, wenn ich was hab werd ich mich wieder melden! :D
Antworten