2014-12-22 4 views
3

Я пытаюсь преобразовать данные изображения base64 в файл изображения и сохранить его.Преобразование base64 строки в изображение и сохранение

base64_image_str = request.POST.get('base64_image_str') 
# it is smthg like: "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDA......." 

with open("newimage.png", "wb") as f: 
    f.write(base64_image_str.decode('base64')) 
    f.close() 

также попытался:

f = open("newimage.png", "wb") 
f.write(decodestring(base64_image_str)) 
f.close() 

Изображение спасаемых, но она повреждена и не может открыть его. Что я делаю не так?

+1

Вы должны избавиться от заголовков, поступающих с данными POST. –

+0

@AshwiniChaudhary какие заголовки? и как это сделать? – doniyor

+0

В первом случае, когда вы используете «с», нет необходимости явно закрывать этот файл, он будет автоматически закрыт после того, как вы выйдете из этого отступного бокса, и я предлагаю вам создать новый файл для сохранения новое изображение после декодирования (удаление «данных: image/jpeg; base64»). Посмотрите, поможет ли это вам? – ZdaR

ответ

5

Начало строки, вплоть до первой запятой, это информация, добавленная путем POSTing данных и, как таковая, не является частью кодировки base64 вашего файла. Поэтому удалите его перед расшифровкой.

+0

Я думал, что '' decodestring'' сделает это для меня, не так ли? – doniyor

+3

Если бы это было так, не могли бы вы быть здесь? –

+0

Данг это, не знаю. это должно быть базовые работы декодера base64. теперь он работает. ни в одном из ответов stackoverflow я не увидел один ответ/вопрос, который его рассматривает. поэтому я думал, что это делается автоматически, если я декодирую .. – doniyor

3

Как вы видите, данные реальное изображение начинает с запятой, вы должны сдирать оставшуюся часть,

base64_image_str = "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDA......." 

base64_image_str = base64_image_str[base64_image_str.find(",")+1:] 
Смежные вопросы