将Base 64字符串转换为BytesIO

时间:2017-08-15 02:23:25

标签: python json flask base64 gcp

感谢任何可以帮助解决这个问题的人,这是我的第一个问题,所以希望它不是很明显。

我有一个图像作为base64字符串传递(使用超薄图像裁剪器)。我想将其转换为文件,然后将其作为blob发送到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:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBD...'

我不知道是否需要编码为base64,从base64解码,将其转换为字节串然后编码/解码?

我尝试过使用bytesIO和StringIO

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

我上传了一张黑色图片,真的试着不先问一下就不问问题,但这个让我感到难过。

感谢。

1 个答案:

答案 0 :(得分:3)

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)))