Как отобразить объект изображения PIL в шаблоне?

Если пользователь загружает изображение и меняет его размер с помощью PIL, я получаю объект PIL Image .

Как отобразить файл PIL Image в шаблоне, прежде чем он будет сохранен в базе данных? Может ли он быть передан как образ и визуализирован?

  • Как инвертировать цвета изображения с помощью PIL (Python-Imaging)?
  • NumPy, PIL, добавляющий изображение
  • PIL Image.resize () не изменяет размер изображения
  • Как использовать PIL (Библиотека изображений Python), поверните изображение и дайте черному фону быть прозрачным
  • Python PIL борется с несжатыми 16-битными изображениями TIFF
  • Открывать изображения из папки один за другим с помощью python?
  • С помощью библиотеки изображений Python (PIL), как создать изображение с альфа-каналом над другим изображением?
  • PIL отсекает верхние буквы
  • 3 Solutions collect form web for “Как отобразить объект изображения PIL в шаблоне?”

    Для ограниченного набора браузеров вы можете кодировать изображение base64 и использовать встроенные изображения. См. Вложение изображений Base64 .

    Решение, которое работает для всех браузеров, представляет собой тег изображения, ссылающийся на представление, которое возвращает изображение .

    [Обновить]

    Все, что я хочу, это предоставить пользователю исходное изображение, а затем запросить другую форму для ввода надписи для изображения (с измененным изображением слева от поля подписи). Затем, когда пользователь нажимает «отправить» изображение, а подпись будет сохранена в экземпляре модели.

    Ну … Когда вы используете <img src="foo"> , foo всегда извлекается GET, возможно, поэтому он не работает – request.FILES не будет доступен в запросе GET. Если вы откроете Firebug или панель инструментов chrome debug, на вкладке «Сеть» вы увидите запрос POST с загруженным изображением и после этого получите запрос GET для извлечения изображения.

    Вы должны сохранить изображение где-то между обоими шагами.

    как еще я могу его сохранить? Я хотел бы, чтобы это было временным. Считаете ли вы, что есть действительно простой способ сделать это, или я должен изучить эти варианты?

    Популярный выбор – redis и memcached . Вы можете думать о них как о гигантском общем питоне-питоне с датой истечения срока действия. Если изображения маленькие, например аватар, вы также можете сохранить данные изображения в переменной сеанса.

    Да и нет.

    Да, вы можете поместить изображения как необработанные данные Base64. Вот небольшой скрипт, который вы можете использовать для проверки этого:

     import Image import base64 import StringIO output = StringIO.StringIO() im = Image.open("test.png") # Your image here! im.save(output, format='PNG') output.seek(0) output_s = output.read() b64 = base64.b64encode(output_s) open("test.html","w+").write('<img src="data:image/png;base64,{0}"/>'.format(b64)) 

    Однако это действительно плохая идея. С несколькими эскизами ваша единственная страница HTML может составлять 10 МБ +.

    То, что вы действительно должны делать, это использовать отдельное представление Django для возврата изображений из объектов PIL в виде файлов PNG, а затем ссылки на это представление в атрибутах img href на вашей странице.

    Вы можете вставлять изображения с кодировкой base64 в тег. Таким образом, вы можете преобразовать изображение PIL в base64 и затем отобразить его.

     from PIL import Image import StringIO x = Image.new('RGB',(400,400)) output = StringIO.StringIO() x.save(output, "PNG") contents = output.getvalue().encode("base64") output.close() contents = contents.split('\n')[0] 

    Затем покажите:

      <img src="data:image/png;base64,' + contents + ' /> 

    Посмотрите на пример вывода .

    Python - лучший язык программирования в мире.