2016-07-22 23 views
0

Ich habe eine Pyramidenansicht, die einen QR-Code generieren und als Bild an den Benutzer zurückgeben muss. Ich möchte vermeiden, das Bild zu speichern, ich möchte es einfach erzeugen, senden und vergessen.erzeugt einen QR-Code in der Pyramidenansicht, gebe ihn zurück, ohne auf die Platte zu schreiben

Das erste, was ich versuchte, war so etwas wie diese:

oRet = StringIO.StringIO() 
oQR = pyqrcode.create('yo mamma') 
oQR.svg(oRet, scale=8) 
return Response(body = oRet.read(), content_type="image/svg") 

Aber dies erzeugt eine SVG-Datei, die nicht geöffnet werden kann.

Blick ein wenig näher:

oRet = StringIO.StringIO() 
oQR = pyqrcode.create('yo mamma') 

oQR.eps(oRet, scale=8) 
with open('test.eps','w') as f: # cant display image in file 
    f.write(oRet.read()) 

with open('test2.eps','w') as f: # image file works fine 
    oQR.eps(f, scale=8) 

oQR.svg(oRet, scale=8) 
with open('test.svg','w') as f: # cant display image in file 
    f.write(oRet.read()) 

with open('test2.svg','w') as f: # image file works fine 
    oQR.svg(f, scale=8) 

oQR.png(oRet) 
with open('test.png','w') as f: # cant display image 
    f.write(oRet.read()) 

with open('test2.png','w') as f: #works 
    oQR.png(f) # works 

with open('test3.png','w') as f: 
    f.write(oQR.png_as_base64_str()) #doesn't work 

Also meine Frage ist: Wie kann ich einen neu generierten QR Code als Pyramide Antwort zurück, ohne sie auf der Festplatte zu speichern? Ich habe nichts zu viel, welches Format das Bild in

ist

Antwort

0

wir haben einen Gewinner:

oRet = StringIO.StringIO() 
oQR = pyqrcode.create('yo mamma') 
oQR.png(oRet, scale=8) 

oResp = Response(body = oRet.getvalue(), content_type="image/png",content_disposition='attachment; filename="yummy.png"') 
return oResp 

Der Trick war oRet.getvalue() stattdessen zu verwenden oder

-2

Hier ist mein Code:

from pyramid.config import Configurator 
from pyramid.response import Response 
from pyramid.response import FileResponse 
from pyramid.view import view_config 
from io import StringIO 
from io import BytesIO 
import matplotlib.pyplot as plt 
import numpy as np 
import pyqrcode 

@view_config(route_name='qrcview') 
def qrc_test2(request): 
    oRet = BytesIO() 
    oQR = pyqrcode.create('bla bla bla bla bla ') 
    oQR.png(oRet, scale=10) 
    print(type(oRet.getvalue())) 
    response = Response(body = oRet.getvalue(), 
    content_type="image/png") 
    return response 

if __name__ == '__main__': 
     with Configurator() as config: 
      config.add_route('qrcview', '/qrc2') 
      config.scan('__main__') 
      app = config.make_wsgi_app() 
server = make_server('0.0.0.0', 6543, app) 
server.serve_forever() 
+1

Ist das eine Antwort oder was versuchst du zu sagen? – wp78de