Как преобразовать строку base64 в изображение?
Я конвертирую изображение в строку base64 и отправляю его с устройства Android на сервер. Теперь мне нужно изменить эту строку на изображение и сохранить его в базе данных.
Любая помощь?
Ответы
Ответ 1
Попробуйте следующее:
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
Ответ 2
Если вы хотите отобразить это изображение без сохранения:
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)
Ответ 3
Просто используйте метод .decode('base64')
и будьте счастливы.
Вам также необходимо определить mimetype/extension изображения, так как вы можете сохранить его правильно, в кратком примере вы можете использовать приведенный ниже код для представления django:
def receive_image(req):
image_filename = req.REQUEST["image_filename"] # A field from the Android device
image_data = req.REQUEST["image_data"].decode("base64") # The data image
handler = open(image_filename, "wb+")
handler.write(image_data)
handler.close()
И после этого используйте файл, сохраненный как хотите.
Просто. Очень простой. ;)
Ответ 4
Это должно сделать трюк:
image = open("image.png", "wb")
image.write(base64string.decode('base64'))
image.close()
Ответ 5
Вы можете попробовать использовать open-cv для сохранения файла, так как он помогает с внутренними преобразованиями изображений. Пример кода:
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)
Затем где-нибудь в вашем коде вы можете использовать его следующим образом:
save(base_64_string, 'testfile.png');
save(base_64_string, 'testfile.jpg');
save(base_64_string, 'testfile.bmp');