1

J'essaie de rendre les pixels noirs en arrière-plan d'une image transparente. Pour cela, j'ai écrit la fonction ci-dessous. Je superpose ensuite l'image (une voiture au centre entourée de pixels noirs) sur une copie de lui-même et déplace lentement la première. Je m'attendais à ce que la première image révèle la copie en dessous sans montrer la limite rectangulaire puisque cette partie aurait dû être transparente. Cependant, je n'obtiens pas l'effet désiré. Est-ce que quelqu'un sait ce que je manque?La transparence PIL ne semble pas fonctionner

def makeImageTransparent(img): 
    img = img.convert("RGBA") 
    datas = img.getdata() 
    newData = [] 
    ii = 0 
    for item in datas: 
    if item[0] == 0 and item[1] == 0 and item[2] == 0: 
     newData.append((0, 0, 0, 0)) 
     ii = ii + 1 
    else: 
     newData.append(item) 
    print str(ii) 
    img.putdata(newData) 
    return img 

Répondre

1

Je ne pouvais pas comprendre comment faire le travail de la transparence, donc je viens de créer ma propre méthode de pâte qui a mis à jour les octets de l'image que j'étais coller directement et cela m'a eu l'effet désiré.

def pasteImage(img, bigim, posn): 
    pixdata = img.load() 
    width, height = img.size 
    mainpixdata = bigim.load() 
    for y in xrange(height): 
    for x in xrange(width): 
     if pixdata[x, y] != (0, 0, 0, 0): 
      mainpixdata[x+posn[0], y+posn[1]] = pixdata[x,y]