[PYTHON] PIL에서 사용하도록 POST에서 base64 디코딩
PYTHONPIL에서 사용하도록 POST에서 base64 디코딩
Flask에서 base64로 인코딩 된 이미지를 받아들이는 간단한 API를 만들고 있는데, 베개를 사용하여 추가 처리를 위해이를 디코딩합니다.
몇 가지 예를 살펴 보았습니다. (1, 2, 3) 나는이 과정의 요지를 얻었지만 베개가 내가 쓴 끈을 읽을 수없는 곳에서는 오류가 계속 발생합니다.
여기에 내가 지금까지 가지고있는 것이있다.
import cStringIO
from PIL import Image
import base64
data = request.form
image_string = cStringIO.StringIO(base64.b64decode(data['img']))
image = Image.open(image_string)
오류를 제공합니다 :
IOError: cannot identify image file <cStringIO.StringIO object at 0x10f84c7a0>
해결법
-
==============================
1.다음과 같이 시도해야합니다.
다음과 같이 시도해야합니다.
from PIL import Image from io import BytesIO import base64 data['img'] = '''R0lGODlhDwAPAKECAAAAzMzM/////wAAACwAAAAADwAPAAACIISPeQHsrZ5ModrLlN48CXF8m2iQ3YmmKqVlRtW4MLwWACH+H09wdGltaXplZCBieSBVbGVhZCBTbWFydFNhdmVyIQAAOw==''' im = Image.open(BytesIO(base64.b64decode(data)))
data [ 'img'] 문자열에는 html 태그 나 매개 변수 data : image / jpeg; base64가 포함되어서는 안됩니다. 예를 들어 jsfiddle입니다.
나는 가독성을 위해 Google에서 가져간 예제로 이미지 문자열을 변경했습니다.
-
==============================
2.img 필드에 포함 된 data : image / jpeg; base64의 메타 데이터 프리픽스가 있습니다. 일반적으로이 메타 데이터는 이미지 데이터를 문서 또는 스타일 시트에 포함 할 때 CSS 또는 HTML 데이터 URI에서 사용됩니다. 임베디드 데이터의 MIME 유형 및 인코딩을 렌더링 브라우저에 제공합니다.
img 필드에 포함 된 data : image / jpeg; base64의 메타 데이터 프리픽스가 있습니다. 일반적으로이 메타 데이터는 이미지 데이터를 문서 또는 스타일 시트에 포함 할 때 CSS 또는 HTML 데이터 URI에서 사용됩니다. 임베디드 데이터의 MIME 유형 및 인코딩을 렌더링 브라우저에 제공합니다.
base64 디코드 전에 접두어를 없애면 PIL이로드 할 수있는 유효한 이미지 데이터가 생성되지만 (아래 참조), 메타 데이터가 서버에 제출되는 방법에 대해 질문 할 필요가 있습니다.
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))
-
==============================
3.necromancy를 위해 유감스럽게 생각하는. 그러나 대답의 아무것도 나에게 완전하게 일하지 않았다. 다음은 Python 3.6 및 Flask 0.13에서 작동하는 코드입니다.
necromancy를 위해 유감스럽게 생각하는. 그러나 대답의 아무것도 나에게 완전하게 일하지 않았다. 다음은 Python 3.6 및 Flask 0.13에서 작동하는 코드입니다.
섬기는 사람:
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 :
// 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);
from https://stackoverflow.com/questions/26070547/decoding-base64-from-post-to-use-in-pil by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] Python - 데이터 프레임에 행을 추가하는 효율적인 방법 (0) | 2018.11.06 |
---|---|
[PYTHON] datetime을 하루 만에 늘리는 방법은 무엇입니까? (0) | 2018.11.06 |
[PYTHON] pip 설치 PIL-E TICKETS-1 - JPEG / PNG 지원 안 함 (0) | 2018.11.06 |
[PYTHON] 파이썬 : 클래스 이름을 함수의 매개 변수로 전달 하시겠습니까? (0) | 2018.11.06 |
[PYTHON] 목록 독해를 사용하여 튜플의 튜플을 1 차원 목록으로 변환하려면 어떻게해야합니까? [복제] (0) | 2018.11.06 |