问题描述
我已经编写了一些代码来拍摄图像,并向其中添加一些文本。目前它只是在本地保存文件,但我希望它临时存储新生成的图像,因此当会话关闭时,文件将被删除。此外,将来多个用户可以同时使用该功能,而无需一个用户编写另一个图像。
我当前的代码是:
def Output(request):
inputValue = request.GET.get('t','')
my_image = Image.open(os.path.join(BASE_DIR,'media','blank.jpg'))
title_font = ImageFont.truetype(os.path.join(BASE_DIR,'homepage','static','Mistral.ttf'),60)
title_text = inputValue
image_editable = ImageDraw.Draw(my_image)
image_editable.text((45,333),title_text,(0,0),font=title_font)
my_image.save(os.path.join(BASE_DIR,'result.jpg'))
return TemplateResponse(request,'homepage/output.html',{'title': 'Output'})
因此将图像本地保存为 result.jpg,我如何为特定会话临时保存它?
解决方法
您可以使用 base64
概念,在 result.jpg
中转换您的 base64
并通过 context
传递 base64 字符串
import base64
from io import BytesIO
from PIL import Image
def get_base64(image):
buffered = BytesIO()
image.save(buffered,format="JPEG")
img_str = base64.b64encode(buffered.getvalue())
return "data:image/jpeg;base64," + img_str.decode()
def Output(request):
inputValue = request.GET.get('t','')
my_image = Image.open(os.path.join(BASE_DIR,'media','blank.jpg'))
title_font = ImageFont.truetype(os.path.join(BASE_DIR,'homepage','static','Mistral.ttf'),60)
title_text = inputValue
image_editable = ImageDraw.Draw(my_image)
image_editable.text((45,333),title_text,(0,0),font=title_font)
base_image = get_base64(image_editable)
return TemplateResponse(request,'homepage/output.html',{'base_image': base_image})
在 HTML 文件中
<img src="{{base_image}}"/>
所以你不需要在系统中保存图像,base64图像很容易在HTML图像标签上工作
,我通过修改 Neeraj Kumar 所写的内容使其工作
import os
from django.shortcuts import render
from django.template.response import TemplateResponse
from PIL import Image,ImageFont,ImageDraw
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
from io import BytesIO
import base64
def get_base64(image):
img = Image.open(image)
buffered = BytesIO()
img.save(buffered,format="PNG")
img_str = base64.b64encode(buffered.getvalue())
return img_str.decode()
def Output(request):
inputValue = request.GET.get('t','blank.png'))
title_font = ImageFont.truetype(os.path.join(BASE_DIR,font=title_font)
my_image.save(os.path.join(BASE_DIR,'result.png'))
base_image = "data:image/png;base64," + get_base64(os.path.join(BASE_DIR,'result.png'))
return TemplateResponse(request,{'title': 'Output','base_image': base_image})