Преобразовать строку Base 64 в BytesIO

Спасибо всем, кто может помочь с этим, это мой первый вопрос, так что, надеюсь, это не супер очевидно.

У меня есть изображение, которое передается в виде строки base64 (с использованием тонкой обрезки изображения). Я хочу преобразовать это в файл, а затем отправить его в Google Storage в виде большого двоичного объекта.

Ранее я просто отправлял файл, как показано ниже

image = request.files.get('image')
client = _get_storage_client()
bucket = client.bucket(current_app.config['CLOUD_STORAGE_BUCKET'])
blob = bucket.blob(filename)

blob.upload_from_string(
    image.read(),
    content_type=content_type)

Сейчас я имею дело с кодом ниже.

cropped_image = json.loads(request.form.get('slim[]'))
data = cropped_image['output']['image']

Переменная data представляет собой строку:

data = 'data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBD...'

я застрял не уверен, если мне нужно кодировать в base64, декодировать из base64, превратить его в строку байтов, а затем кодировать / декодировать??

Я попытался просто отправить его как использует bytesIO и StringIO

image = BytesIO(data)
blob.upload_from_string(
    image.read(),
    content_type=content_type)

и я загружаю черное изображение, действительно стараюсь не задавать вопросы, не исследуя сначала, но это поставило меня в тупик.

Благодарю.

1 ответ

Решение

re.sub("data:image/jpeg;base64,", '', b64_str).decode("base64") работает в Python2. В Py 2 str является bytes на самом деле.

ОБНОВИТЬ

from base64 import b64decode

with open("test.jpeg", 'wb') as f:
    f.write(b64decode(re.sub("data:image/jpeg;base64,", '', b64_str)))

# or

image = BytesIO(b64decode(re.sub("data:image/jpeg;base64", '', b64_str)))
Другие вопросы по тегам