Из представления POST клиента мы успешно получаем изображение в следующем формате data:image/jpeg;base64,/9j/....
и файл изображения генерируется следующим кодом:
@app.route('/submission', methods=('GET', 'POST'))
def submission():
if request.method == 'POST':
raw_image = request.form['file']
#Problem Starts Here
# this doesn't work either:
# raw_image = raw_image.replace("data:image/jpeg;base64,/9j/", '');
with open(UPLOADED_IMAGES_DEST+'/image.jpeg', 'wb') as fh:
fh.write(base64.decodebytes(raw_image))
#Problem Ends Here
return jsonify(request.form)
return render_template('submission.html')
Однако изображение нельзя открыть, так как это "Неверный или неподдерживаемый формат". Я пытаюсь улучшить процесс преобразования, чтобы он создавал видимый JPEG-образ.
raw_image
: data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoMDAsKCwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT/2wBDAQMEBAUEBQkFBQkUDQsNFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBT/wAARCADwAUADASIAAhEBAxEB/8QAHQAAAgIDAQEBAAAAAAAAAAAABQYEBwIDCAEACf/EAEwQAAEDAwMCBAQEAwUFBQQLAAECAxEABAUGEiExQQcTUWEIInGBFDKRoRVCUiOxwdHwJGJyouEJFjOSwhdDgvEmU2ODk7LDxNLU4v/EABsBAAMBAQEBAQAAAAAAAAAAA
...
Я взял ваши данные и расшифровал их, он выглядит довольно близко к заголовку JPEG, который я взял из реального файла (рисунок ниже). Не вижу никаких проблем, кроме того, вы должны начать декодирование из /9j/4AA...
далее.
>>> a = '/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoMDAsKCwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT/2wBDAQMEBAUEBQkFBQkUDQsNFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBT/wAARCADwAUADASIAAhEBAxEB/8QAHQAAAgIDAQEBAAAAAAAAAAAABQYEBwIDCAEACf/EAEwQAAEDAwMCBAQEAwUFBQQLAAECAxEABAUGEiExQQcTUWEIInGBFDKRoRVCUiOxwdHwJGJyouEJFjOSwhdDgvEmU2ODk7LDxNLU4v/EABsBAAMBAQEBAQAAAAAAAAAA'
>>> base64.b64decode(a)
'\xff\xd8\xff\xe0\x00\x10JFIF\x00\x01\x01\x00\x00\x01\x00\x01\x00\x00\xff\xdb\x00C\x00\x03\x02\x02\x03\x02\x02\x03\x03\x03\x03\x04\x03\x03\x04\x05\x08\x05\x05
Это шестнадцатеричный дамп из реальной картинки в формате JPEG.
Вам необходимо удалить data:image/jpeg;base64,
но не выходить за рамки этого - это приведет к поломке данных изображения.
base64.decodebytes(raw_image)
: TypeError: expected bytes-like object, not str
base64.decodebytes(raw_image)
TypeError: expected bytes-like object, not str
. Я попытался переключиться на .decodestring()
но получил ту же ошибку. Является ли мое использование raw_image = raw_image.replace("data:image/jpeg;base64,", '');
испортить данные?
base64.b64decode()
raw_image
иimage.jpeg
?raw_image
но при ближайшем рассмотренииraw_image
что создаваемый файл пуст и имеетraw_image
0 байт.