2014-10-17 35 views
5

我有一个生成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错误,所以我不太清楚我米东错了。

+1

您是否尝试过在调试模式下运行,看看有什么实际错误是? – dirn 2014-10-17 03:41:18

+0

我没有,但我怀疑,img qr.make_image()返回是一个python图像对象,而不是一个实际的二进制文件。如果是这样的话......我可以保存它,然后再次打开文件以供阅读,然后再提供它。但如果可能,我想避免@dim – 2014-10-17 03:44:08

回答

0

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) 
1

编辑:看到你的回应后不想保存到临时文件。但是如果你决定将它保存到临时位置,这是一种方法。

您可以将QR码图像保存在临时位置,并使用send_file进行提供。

send_filehttp://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)