2014-10-17 17 views
5

पर अजगर के QRCode का उपयोग कर मैं एक समारोह है कि एक QR छवि उत्पन्न करता है एक जेनरेट किया गया 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

+0

मेरे पास नहीं है, लेकिन मुझे संदेह है कि img qr.make_image() वापसी एक पायथन छवि वस्तु है और वास्तविक बाइनरी नहीं है। यदि ऐसा है ... मैं इसे सहेज सकता हूं, और फ़ाइल को पढ़ने के लिए फिर से खोल सकता हूं, और फिर इसे प्रस्तुत कर सकता हूं। लेकिन अगर संभव हो तो मैं उस @ डीआईएम से बचना चाहूंगा –

उत्तर

0

Google+ पर स्थित सज्जन मुझे एक समाधान प्रदान की गई है, हालांकि वह कोई ऐसा खाता है, मैं उसका जवाब साझा करने के लिए तय कर लिया है:

#!/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

संपादित करें: उत्तर देने के बाद अस्थायी फ़ाइल में सहेजना नहीं चाहते हैं, इस बारे में अपनी टिप्पणी देखें। लेकिन अगर आप इसे अस्थायी स्थान पर सहेजने का फैसला करते हैं, तो यहां एक तरीका है।

आप एक अस्थायी स्थान में क्यूआर कोड छवि को सहेज सकते हैं और 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) 
संबंधित मुद्दे