我试图在JS中创建裁剪和调整大小工具(使用cropit)和Python(Flask)
裁剪返回裁剪图像的base64,我通过AJAX将其发送到服务器,但无法保存。
Ajax:
$.ajax({
type: 'GET',
url: '/api/saver',
data: 'file=' + imageData,
enctype: 'multipart/form-data',
processData: false, // Important!
contentType: 'application/json;charset=UTF-8',
cache: false,
success: function(msg){
console.log('Done')
}
});
在服务器端
@app.route('/api/saver/', methods=['GET', 'POST'])
def api_save_base64_image():
if request.method == 'GET':
file = request.args.get('file')
starter = file.find(',')
image_data = file[starter+1:]
image_data = bytes(image_data, encoding="ascii")
with open('.../image.jpg', 'wb') as fh:
fh.write(base64.decodebytes(image_data))
return 'ok'
return 'error
没有例外地返回,但是image.jpg被打破(空)。
如何通过Flask从客户端保存图像?
答案 0 :(得分:2)
这有点棘手:)但cropit
将图片导出为png
数据:图像/ PNG
因此,如果您将代码更改为此代码,那么它可以工作:)
with open('image.png', 'wb') as fh:
fh.write(base64.decodebytes(image_data))
对于更改格式,您可以执行以下操作:
import base64
from io import BytesIO
from PIL import Image
...
image_data = bytes(image_data, encoding="ascii")
im = Image.open(BytesIO(base64.b64decode(image_data)))
im.save('image.jpg')
...
您可以在image_stof.py
中找到包含数据的代码