首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将POST中的base64解码为在PIL中使用

将POST中的base64解码为在PIL中使用
EN

Stack Overflow用户
提问于 2014-09-27 09:56:50
回答 3查看 44.5K关注 0票数 51

我在Flask中编写了一个简单的应用程序接口,它接受以base64编码的图像,然后使用Pillow对其进行解码以便进一步处理。

我看过一些示例(123),我想我已经理解了这个过程的要点,但我总是得到一个错误,即Pillow无法读取我给出的字符串。

这是我到目前为止所得到的:

代码语言:javascript
复制
import cStringIO
from PIL import Image
import base64

data = request.form
image_string = cStringIO.StringIO(base64.b64decode(data['img']))
image = Image.open(image_string)

这给出了错误:

代码语言:javascript
复制
IOError: cannot identify image file <cStringIO.StringIO object at 0x10f84c7a0>
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-09-28 06:10:23

你应该尝试类似这样的东西:

代码语言:javascript
复制
from PIL import Image
from io import BytesIO
import base64

data['img'] = '''R0lGODlhDwAPAKECAAAAzMzM/////wAAACwAAAAADwAPAAACIISPeQHsrZ5ModrLl
N48CXF8m2iQ3YmmKqVlRtW4MLwWACH+H09wdGltaXplZCBieSBVbGVhZCBTbWFydFNhdmVyIQAAOw==''' 

im = Image.open(BytesIO(base64.b64decode(data['img'])))

您的data['img']字符串不应包含示例JSFiddle中的HTML标记或参数data:image/jpeg;base64

出于可读性的目的,我已经更改了取自Google的一个示例的图像字符串。

票数 104
EN

Stack Overflow用户

发布于 2014-09-28 21:16:24

img字段中包含data:image/jpeg;base64,的元数据前缀。在将图像数据嵌入到文档或样式表中时,通常在CSS或HTML数据URI中使用此元数据。它的作用是向呈现浏览器提供嵌入式数据的MIME类型和编码。

你可以在base64解码之前去掉前缀,这应该会产生有效的图像数据,PIL可以加载(见下文),但是你真的需要质疑元数据是如何提交给你的服务器的,因为它通常不应该提交。

代码语言:javascript
复制
import re
import cStringIO
from PIL import Image

image_data = re.sub('^data:image/.+;base64,', '', data['img']).decode('base64')
image = Image.open(cStringIO.StringIO(image_data))
票数 31
EN

Stack Overflow用户

发布于 2017-07-06 21:14:29

对于巫术,我很抱歉,但是没有一个答案对我完全有效。这是在Python 3.6和Flask 0.13上工作的代码。

服务器:

代码语言:javascript
复制
from flask import Flask, jsonify, request
from io import BytesIO
from web import app
import base64
import re
import json
from PIL import Image

@app.route('/process_image', methods=['post'])
def process_image():
    image_data = re.sub('^data:image/.+;base64,', '', request.form['data'])
    im = Image.open(BytesIO(base64.b64decode(image_data)))
    return json.dumps({'result': 'success'}), 200, {'ContentType': 'application/json'}

客户端JS:

代码语言:javascript
复制
// file comes from file input
var reader = new FileReader();
reader.onloadend = function () {
    var fileName = file.name;
    $.post('/process_image', { data: reader.result, name: fileName });
};
reader.readAsDataURL(file);
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26070547

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档