Bonjour

j ai un souci avec PIL (enfin je pense que ca viens de la)
j essais comme sur Tkinter d inclure des données directement dans le source plutot que d'avoir a charger des fichiers (qui suppose devoir aussi verifier qu'ils soient presents)

Petit code simple qui ouvre 2 Label dans lequel je depose un GIF et un PNG
le GIF s affiche mais pas le PNG

les données sont codés en base64 (donc du texte) comme indiqué sur http://effbot.org/tkinterbook/photoimage.htm
J ai enlevé les pavés """DATAbase64""" pour la lisibilité :

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
from Tkinter import *
from PIL import Image, ImageTk
from os import system
from binascii import *
 
gif_data= """
...base 64 text ...
"""
png_data="""
... base 64 text ...
"""
 
fenetre = Tk()
labelgif = Label(fenetre)
labelgif.grid()
photogif = PhotoImage(data=gif_data)
#labelgif.image=gif_data
itemgif = labelgif.configure(image = photogif)
 
labelpng = Label(fenetre)
labelpng.grid()
decode=a2b_base64(png_data)
photopng = ImageTk.PhotoImage(decode)
itempng = labelgif.configure(image = photopng)
 
fenetre.mainloop()
sys.exit()
gif_data est bien toléré par Tkinter mais cela suposse un format adapté et reduit en nombre (gif entre autre)
je veux faire de meme avec du PNG ou du JPG et donc il me faut utiliser PIL

-1) Comment faire afficher ce PNG?
sur les doc je ne trouve que des exemples divers et variés mais tous avec la fonction image=PhotoImage(file="image.jpg")
J ai testé la fonction decode64 (a2b_base64) qui decode bien la chaine mais qui ne fait pas afficher l image...

-2) j ai noté aussi que un peu partout il est dit de garder une reference (a ce que j ai compris, c est dans le cas ou le garbage collector efface les données)
j ai donc inclus (mais en commentaire) un #labelgif.image=gif_data
est-ce valable ou je me trompe de syntaxe?
peu etre faut'il garder labelgif.image=photogif

-3) voulant inclure pas mal de data (image et sons) dans le source, est ce raisonable, au point de vu performance (pas besoin de charger depuis le disque), et surtout au niveau consomation memoire ? (dans le cas d'utilisation d une image par ex, python reserve t il la memoire en consquence ou prévoit il juste un pointeur pour designer les données a l objet qui l utilise (canvas, label ...)
car si c'est ok pour 4 ou 5 icones, cela peut poser des problemes dans le cas d'utilisation de dizaines de mega de data (je pense utiliser 50Mo environ dont 5Mo utilisé en permanence)

-4) le codage base64 n est pas du tout adapté, et il faut bien mieux se tourner vers TarIO ou autre afin de gerer ses data?