Преобразовать строку 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)))