Shree Singhi
Shree Singhi

Reputation: 832

How to save an image as a variable?

Now, I have a python game that has sprites, and it obtains the images from files in its directory. I want to make it such that I do not even need the files. Somehow, to pre-store the image in a variable so that i can call it from within the program, without the help of the additional .gif files

The actual way i am using the image is

image = PIL.Image.open('image.gif')

So it would be helpful if you could be precise about how to replace this code

Upvotes: 2

Views: 25127

Answers (2)

figbeam
figbeam

Reputation: 7176

Continuing @eatmeimadanish's thoughts, you can do it manually:

import base64

with open('image.gif', 'rb') as imagefile:
    base64string = base64.b64encode(imagefile.read()).decode('ascii')

print(base64string)  # print base64string to console
# Will look something like:
# iVBORw0KGgoAAAANS  ...  qQMAAAAASUVORK5CYII=

# or save it to a file
with open('testfile.txt', 'w') as outputfile:
    outputfile.write(base64string)


# Then make a simple test program:

from tkinter import *
root = Tk()

# Paste the ascii representation into the program
photo = 'iVBORw0KGgoAAAANS ... qQMAAAAASUVORK5CYII='

img = PhotoImage(data=photo)
label = Label(root, image=img).pack()

This is with tkinter PhotoImage though, but I'm sure you can figure out how to make it work with PIL.

Upvotes: 5

eatmeimadanish
eatmeimadanish

Reputation: 3907

Here is how you can open it using PIL. You need a bytes representation of it, then PIL can open a file like object of it.

import base64
from PIL import Image
import io

with open("picture.png", "rb") as file:
    img = base64.b64encode(file.read())

img = Image.open(io.BytesIO(img))
img.show() 

Upvotes: 2

Related Questions