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 :
Nom : FondCreature.png
Affichages : 1560
Taille : 119,3 Ko

* L'insert :
Nom : Dragon_Faerie_thumb.png
Affichages : 1464
Taille : 389,8 Ko

* Le résultat gimp :
Nom : coutl.jpeg
Affichages : 1389
Taille : 27,6 Ko


Notes :
- les sources sont en RGB sans couche alpha et fond transparent ...

Voici un test effectué :
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")
* Résultat blend :
Nom : blend.png
Affichages : 1383
Taille : 195,4 Ko

///

J'ai testé une variante avec un masque alpha sur le "logo" et un Paste mais voici le résultat "paste/composite" :
Nom : composit.png
Affichages : 1457
Taille : 174,0 Ko

///

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