我通过DAJAX获取URL。
然后将URL传递给下面的函数。抛出TypeError。
我不想将'img'保存到磁盘,然后重新打开它以进行转换。
我不知道还有什么可以尝试所以我认为我是世界。感谢您的帮助。
def getqrcode(link):
bsettings = Bitcoinsettings.objects.get(pk=1)
qr = qrcode.QRCode(version=1, error_correction=qrcode.constants.ERROR_CORRECT_H, box_size=bsettings.qrcodesize , border=5,)
qr.add_data(link)
qr.make(fit=True)
img = qr.make_image()
output = StringIO.StringIO()
img.save(output, 'GIF')
contents = output.getvalue()
data = base64.b64encode(open(contents,'rb').read())
data = "data:image/png;base64," + data
output.close()
img = []
return data
TypeError: file() argument 1 must be encoded string without NULL bytes, not str
这是ajax.py代码。
from torgap.bitcoin.bitcoin import getqrcode
from dajaxice.decorators import dajaxice_register
from dajax.core import Dajax
@dajaxice_register
def getimage(request, image):
try:
dajax = Dajax()
link = image
image = getqrcode(link)
dajax.assign('#qrcode', 'src', image)
return dajax.json()
except Exception as e:
print e
答案 0 :(得分:0)
由于您尝试使用
重新读取文件,我不确定您是否理解返回ouput.getvalue()
的内容
data = base64.b64encode(open(contents,'rb').read())
但是上面的行contents
已经包含了图像文件的字符串表示。几乎可以肯定,这里隐藏着file()
抱怨的烦人的 NULL字节。
尝试通过以下方式更改上面的行:
data = base64.b64encode(contents)
另外,您可以查看StringIO参考。