我正在调用django rest framework get api来创建条形码。当我尝试将它保存为图像时,它工作得很好。
@api_view(['GET'])
def mybarcode(request):
from elaphe import barcode
code = barcode('datamatrix', "sampletext",
encoding='utf-8', scale=2,
options=dict(columns=24, rows=24),
margin=2, data_mode='50bits')
code.save("mybarcode.jpg")
return Response({'status': True})当我将此接口调用为"http://127.0.0.1:9999/api/v1/testbarcode“时,它工作得很好。将创建一个名为"mybarcode.jpg“的镜像,接口返回其状态为True。
但我希望将图像作为此api调用的结果返回。因为我必须将它包含在一个图像标签中。
<img src='http://127.0.0.1:9999/api/v1/testbarcode' />有没有办法做到这一点?
发布于 2018-05-29 20:17:57
应该避免在Django视图中返回图像/文件。Web服务器NGINX/Apache擅长处理这些问题。
将镜像保存在存储中,如本地磁盘、亚马逊S3或其他云存储。然后根据图像的存储位置渲染图像。
在本地存储的情况下,它可以使用web服务器交付。存储在亚马逊云服务S3中的图像可以通过亚马逊云服务CDN Cloudfront提供。
发布于 2020-08-24 22:24:29
我用它返回了一个成员的二维码:
@staticmethod
def qr_code(request, member_id):
m = Member.objects.get(id=member_id)
response = HttpResponse(m.generate_qrcode())
response['Content-Type'] = "image/png"
response['Cache-Control'] = "max-age=0"
return response在Member类上调用以下代码:
def generate_qrcode(self):
qr = qrcode.QRCode(
version=2,
error_correction=qrcode.constants.ERROR_CORRECT_H,
box_size=4,
border=0,
)
qr.add_data(self.formatted_id())
qr.make(fit=True)
img = qr.make_image()
buffer = BytesIO()
img.save(buffer)
return buffer.getbuffer()这种方式不会接触到磁盘,尽管我认为它会以更高的并发性占用内存。
发布于 2018-05-29 19:54:40
用于将图像转换为base64
import base64
def(yourimagefile):
with open(yourimagefile, "rb") as image_file:
base64string = base64.b64encode(image_file.read())
return base64string在创建图像后挂接此模块,并更改用于显示base64内容的html
https://stackoverflow.com/questions/50582519
复制相似问题