Je veux encoder une image dans une chaîne à l'aide du module base64. J'ai cependant rencontré un problème. Comment spécifier l'image que je souhaite encoder? J'ai essayé d'utiliser le répertoire sur l'image, mais cela conduit simplement à encoder le répertoire. Je veux que le fichier image réel soit encodé.
ÉDITER
J'ai essayé cet extrait:
with open("C:\Python26\seriph1.BMP", "rb") as f:
data12 = f.read()
UU = data12.encode("base64")
UUU = base64.b64decode(UU)
print UUU
self.image = ImageTk.PhotoImage(Image.open(UUU))
mais j'obtiens l'erreur suivante:
Traceback (most recent call last):
File "<string>", line 245, in run_nodebug
File "C:\Python26\GUI1.2.9.py", line 473, in <module>
app = simpleapp_tk(None)
File "C:\Python26\GUI1.2.9.py", line 14, in __init__
self.initialize()
File "C:\Python26\GUI1.2.9.py", line 431, in initialize
self.image = ImageTk.PhotoImage(Image.open(UUU))
File "C:\Python26\lib\site-packages\PIL\Image.py", line 1952, in open
fp = __builtin__.open(fp, "rb")
TypeError: file() argument 1 must be encoded string without NULL bytes, not str
Qu'est-ce que je fais mal?
base64.b64encode(fh.read()).decode()
pour obtenir une chaîne à utiliser dans les fichiers html.Avec python 2.x, vous pouvez facilement encoder en utilisant .encode:
la source
La première réponse affichera une chaîne avec le préfixe b '. Cela signifie que votre chaîne sera comme ceci b'your_string 'Pour résoudre ce problème, veuillez ajouter la ligne de code suivante.
la source
:-)
)Comme je l'ai dit dans votre question précédente, il n'est pas nécessaire d'encoder la chaîne en base64, cela ne fera que ralentir le programme. Utilisez simplement le repr
Maintenant, l'image est stockée sous forme de variable appelée
image_data
dans un fichier appeléimage.py
Démarrer un nouvel interpréteur et importer l'image_datala source
Empruntant à ce qu'Ivo van der Wijk et gnibbler ont développé précédemment, il s'agit d'une solution dynamique
Vous pouvez ensuite décider de compiler le fichier image de sortie avec Cython pour le rendre cool. Avec cette méthode, vous pouvez regrouper tous vos graphiques dans un seul module.
la source
la source