2013-04-25 6 views
13

Konwertuję obraz na ciąg znaków base64 i wysyłam go z urządzenia z systemem Android na serwer. Teraz muszę zmienić ten ciąg z powrotem na obraz i zapisać go w bazie danych.Jak przekonwertować ciąg base64 na obraz?

Każda pomoc?

+1

Jeśli wiesz jak przerobić coś base64, z pewnością wiesz jak przekształcić go z powrotem? To ten sam moduł. – Cairnarvon

+1

Cóż, po prostu odwróć to, co zrobiłeś po konwersji z obrazu na base64. Ponieważ nie podałeś żadnych szczegółów, nikt nie będzie mógł być bardziej konkretny. –

Odpowiedz

35

Spróbuj tego:

import base64 
imgdata = base64.b64decode(imgstring) 
filename = 'some_image.jpg' # I assume you have a way of picking unique filenames 
with open(filename, 'wb') as f: 
    f.write(imgdata) 
# f gets closed when you exit the with statement 
# Now save the value of filename to your database 
+0

@rmunn ... po co jest "wb" ?! – omarsafwany

+4

@omarsafwany To znaczy "w" rytuał i "b" stały http://stackoverflow.com/questions/2665866/what-is-the-wb-mean-in-this-code-using-python – HydrUra

+0

@rmunn: Dziękuję bardzo za te linie! Wiem, że komentarze nie są wymawiane dzięki, ale naprawdę oszczędzasz mój czas! – HydrUra

0

To powinno załatwić sprawę:

image = open("image.png", "wb") 
image.write(base64string.decode('base64')) 
image.close() 
1

Wystarczy użyć metody .decode('base64') i iść, aby być szczęśliwym.

Trzeba też wykryć mimeType/rozszerzenie obrazu, jak można go zapisać poprawnie, w krótkim przykład, można użyć poniższy kod dla widoku django:

def receiveImage(req): 
    image_ext = req.REQUEST["image_filename"] # A field from the Android device 
    image_data = req.REQUEST["image_data"].decode("base64") # The data image 
    filehandler = fopen($image_ext, "wb+") 
    filehandler.write(image_data) 
    filehandler.close() 

I , po tym użyj pliku $, jak chcesz.

Proste. Bardzo prosta. ;)

0

W przypadku chcesz wyświetlić ten obraz bez zapisywania:

from PIL import Image 
import cv2 
    # Take in base64 string and return cv image 
    def stringToRGB(base64_string): 
     imgdata = base64.b64decode(str(base64_string)) 
     image = Image.open(io.BytesIO(imgdata)) 
     return cv2.cvtColor(np.array(image), cv2.COLOR_BGR2RGB)