Chcę zakodować obraz w ciągu za pomocą modułu base64. Jednak napotkałem problem. Jak określić obraz, który chcę zakodować? Próbowałem użyć katalogu do obrazu, ale to po prostu prowadzi do zakodowania katalogu. Chcę, aby rzeczywisty plik obrazu był zakodowany.
EDYTOWAĆ
Wypróbowałem ten fragment:
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))
ale pojawia się następujący błąd:
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
Co ja robię źle?
base64.b64encode(fh.read()).decode()
aby uzyskać ciąg znaków do wykorzystania w plikach html.W Pythonie 2.x możesz w trywialny sposób kodować używając .encode:
źródło
Pierwsza odpowiedź wypisze łańcuch z prefiksem b '. Oznacza to, że Twój ciąg będzie wyglądał następująco: b'your_string 'Aby rozwiązać ten problem, dodaj następujący wiersz kodu.
źródło
:-)
)Jak powiedziałem w poprzednim pytaniu, nie ma potrzeby kodowania łańcucha przy użyciu base64, spowoduje to jedynie spowolnienie programu. Po prostu użyj repr
Teraz obraz jest przechowywany jako zmienna wywołana
image_data
w pliku o nazwieimage.py
Start a fresh interpreter i zaimportuj image_dataźródło
Pożyczanie od tego, co van der Wijk Ivo i gnibbler opracowali wcześniej, jest to rozwiązanie dynamiczne
Następnie możesz zdecydować o skompilowaniu wyjściowego pliku obrazu za pomocą Cythona, aby był fajny. Dzięki tej metodzie możesz połączyć całą swoją grafikę w jeden moduł.
źródło
źródło