2014-02-17 81 views
0

我通過DAJAX通過POST獲取URL。試圖將內存中的圖像轉換爲base64字符串時獲取TypeError?

然後將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

我不知道你明白,因爲你正試圖與

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

,但在該行再次讀取上面的文件contents已經包含的圖像文件的字符串表示什麼返回ouput.getvalue()。而且幾乎可以肯定的是,file()抱怨這裏是隱藏令人討厭的空字節的地方。

嘗試更改上面的行:

data = base64.b64encode(contents) 

您也可以給看看StringIO參考。

相關問題