Как преобразовать 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,
)

Проверьте это.

Вернуться на верх