web-dev-qa-db-fra.com

Comment convertir une chaîne en base64 en image?

Je convertis une image en base64 string et l'envoie depuis un périphérique Android au serveur. Maintenant, je dois reconvertir cette chaîne en image et la sauvegarder dans la base de données.

De l'aide?

23
omarsafwany

Essaye ça:

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
59
rmunn

Si vous souhaitez afficher cette image sans enregistrer:

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)
5
Jumabek Alikhanov

Utilisez simplement la méthode .decode('base64') et allez être heureux.

Vous devez également détecter le type/l’extension de l’image, comme vous pouvez l’enregistrer correctement. Dans un bref exemple, vous pouvez utiliser le code ci-dessous pour obtenir une vue 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()

Et, après cela, utilisez le fichier $ comme vous le souhaitez.

Simple. Très simple. ;)

3
Fernando Mota

Vous pouvez essayer d’utiliser open-cv pour enregistrer le fichier, car cela facilite les conversions de type d’image en interne. Le code exemple:

import cv2
import numpy as np

def save(encoded_data, filename):
    nparr = np.fromstring(encoded_data.decode('base64'), np.uint8)
    img = cv2.imdecode(nparr, cv2.IMREAD_ANYCOLOR)
    return cv2.imwrite(filename, img)

Ensuite, quelque part dans votre code, vous pouvez l'utiliser comme ceci:

save(base_64_string, 'testfile.png');
save(base_64_string, 'testfile.jpg');
save(base_64_string, 'testfile.bmp');
0
Anthony Anyanwu

Cela devrait faire l'affaire:

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