Bonjour,
J'aimerais pouvoir faire un programme pour automatiser la création de cartes pour un ami.
Une des étapes consiste à insérer une image par dessus le fond, avec une fusion . (actuellement il le fait à la main avec Gimp ...)
J'ai commencé ce week-end à découvrir PIL (Pillow ?) mais je n'ai pas réussi à avoir un résultat satisfaisant.
Le mieux obtenu est avec un alpha_composite ... et j'ai galéré sans connaitre trop les images et couches alpha d'abord, et ensuite la lib PIL.
Au final j'ai une sorte de fondu, mais tout est à moitié transparent en fait, et donc un résultat mitigé.
Voici des sources et le rendu que j'aimerais avoir :
* Le fond :
* L'insert :
* Le résultat gimp :
Notes :
- les sources sont en RGB sans couche alpha et fond transparent ...
Voici un test effectué :
* Résultat blend :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41 import os from PIL import Image, ImageDraw, ImageFont from utils import changeImageSize #Test de blend (fusion) de 2 image avec un ratio alpha constant. #Problème : cette fonction ne prend que 2 images de même taille ! #Préparation du logo à insérer filename='images/Dragon_Faerie_thumb.png' logo = Image.open(filename, 'r') logo = logo.convert("RGBA") logo = changeImageSize(230, 230, logo) #Resize #a_channel = Image.new('L', logo.size, 200) # 'L' 8-bit pixels, black and white, +transparency #logo.putalpha(a_channel) #remplacement du blanc en transparent (fond + partout ...) datas = logo.getdata() newData = [] for item in datas: if item[0] > 240 and item[1] > 240 and item[2] > 240: newData.append((0,0,0,0)) else: newData.append(item) logo.putdata(newData) logo.save("logo_temp.png") #Préparation du background filename1='images/FondCreature.png' bg = Image.open(filename1, 'r') bg = bg.convert("RGBA") #Création masque foreground taille identique fg = Image.new("RGBA", bg.size, (0,0,0,0)) fg.paste(logo, (95,25), logo) fg.save("fg_temp.png") #Blend blend_img = Image.alpha_composite(bg, fg) blend_img.save("blend.png", format="png")
///
J'ai testé une variante avec un masque alpha sur le "logo" et un Paste mais voici le résultat "paste/composite" :
///
2 soucis à régler : le fondu
* Blend : pas de fondu ?
* Composite : fondu mais logo tout palot
et supprimer le fond blanc car les sources ne sont pas correctes, sur le blend, on voir que le détourage est moyen.
Merci d'avance pour votre aide
dcpc
Partager