2014-10-17 150 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)