Как преобразовать HttpResponse в изображение в Django? так же, как скриншот
Мне нужен файл png и некоторые динамические значения в качестве ответа для представления, и это работает нормально. Теперь мне нужно преобразовать этот httpresponse в изображение для загрузки в ведро s3. Так же как сделать скриншот HttpResponse. Есть ли какой-нибудь пакет? Я пробовал imgkit и html2image, но они не работают хорошо.
def home(request):
im_io = io.BytesIO()
im = Image.open(r'test.png')
im.save(im_io, 'png', quality=70)
im_io.seek(0)
im_io_png = base64.b64encode(im_io.getvalue())
context = im_io_png.decode('UTF-8')
img_tag = mark_safe(f"<img src='data:image/png;base64, {context}'/>")
return render(request, 'api/home.html',{'img_tag': img_tag})
Я не понимаю, что именно вы хотите сделать... Вы хотите поместить изображение в шаблон, или вернуть HttpResponse с файлом?
В принципе, ваш код должен работать нормально, я думаю, я использовал подобный конвертер base64 в своем проекте:
def get_file_data(file_path):
"""Get data of a file."""
with open(file_path, 'rb') as f:
data = f.read()
f.close()
return data
@register.simple_tag
def to_base64(path):
"""Convert to base64."""
file_path = find(path)
ext = file_path.split('.')[-1]
file_str = base64.b64encode(get_file_data(file_path)).decode()
return f'data:image/{ext};base64,{file_str}'
Вы можете попробовать переписать свою логику в соответствии с моим кодом.
Но, если вам нужно вернуть FileResponse, вы можете сделать это следующим образом:
return FileResponse(
ContentFile(
file_buffer.getvalue(),
'YourImageName.extension'
),
as_attachment=True,
)
Проверьте это.