如何使用Python的QR码在瓶
问题描述:
我有一个生成QR图像的功能服务于生成QR图片:如何使用Python的QR码在瓶
import qrcode
def generateRandomQR():
qr = qrcode.QRCode(version=1,
error_correction=qrcode.constants.ERROR_CORRECT_L,
box_size=10,
border=4,
)
qr.add_data("Huehue")
qr.make(fit=True)
img = qr.make_image()
return img
现在那么这个想法是生成的图像,然后把它扔在烧瓶中,作为一个形象,这是我的烧瓶功能:
@app.route("/qrgenerator/image.jpg")
def generateQRImage():
response = make_response(qrWrapper.generateRandomQR())
response.headers["Content-Type"] = "image/jpeg"
response.headers["Content-Disposition"] = "attachment; filename=image.jpg"
return response
但它似乎并不像它的正常工作......我打一个500错误,所以我不太清楚我米东错了。
答
Google+上的绅士提供我一个解决方案,但他没有SO帐户,我已经决定要分享他的回答:
#!/usr/bin/env python2.7
# -*- coding: utf-8 -*-
"""Example of Flask and qrcode.
NOTE: by requirements image in memory!
"""
__author__ = 'Daniel Leybovich <[email protected]>'
__version__ = (0, 0, 1)
import os
import sys
import flask
import qrcode
import cStringIO
app = flask.Flask(__name__)
def random_qr(url='www.google.com'):
qr = qrcode.QRCode(version=1,
error_correction=qrcode.constants.ERROR_CORRECT_L,
box_size=10,
border=4)
qr.add_data(url)
qr.make(fit=True)
img = qr.make_image()
return img
@app.route('/get_qrimg')
def get_qrimg():
img_buf = cStringIO.StringIO()
img = random_qr(url='www.python.org')
img.save(img_buf)
img_buf.seek(0)
return flask.send_file(img_buf, mimetype='image/png')
if __name__ == '__main__':
app.run(host='0.0.0.0', debug=True)
答
编辑:看到你的回应后不想保存到临时文件。但是如果你决定将它保存到临时位置,这是一种方法。
您可以将QR码图像保存在临时位置,并使用send_file
进行提供。
send_file
在http://flask.pocoo.org/docs/0.10/api/#flask.send_file
证明我没有测试过此代码段,但这样的事情应该工作。
from flask import send_file
@app.route("/qrgenerator/image.jpg")
def generateQRImage():
response = make_response(qrWrapper.generateRandomQR())
temp_location = '/tmp/image.jpg'
# Save the qr image in a temp location
image_file = open(temp_location, 'wb')
image_file.write(response)
image_file.close
# Construct response now
response.headers["Content-Type"] = "image/jpeg"
response.headers["Content-Disposition"] = "attachment; filename=image.jpg"
return send_file(temp_location)
您是否尝试过在调试模式下运行,看看有什么实际错误是? – dirn 2014-10-17 03:41:18
我没有,但我怀疑,img qr.make_image()返回是一个python图像对象,而不是一个实际的二进制文件。如果是这样的话......我可以保存它,然后再次打开文件以供阅读,然后再提供它。但如果可能,我想避免@dim – 2014-10-17 03:44:08