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 に答える