0

我通过 DAJAX 通过 POST 获取 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 
4

1 回答 1

0

我不确定您是否理解返回的内容ouput.getvalue(),因为您正在尝试再次读取文件

data = base64.b64encode(open(contents,'rb').read())

但在上面的行中contents已经包含图像文件的字符串表示。而且几乎可以肯定,这里隐藏着抱怨的烦人NULL字节file()

尝试通过以下方式更改上面的行:

 data = base64.b64encode(contents)

您也可以查看StringIO参考。

于 2014-02-17T14:11:57.007 回答