2014-02-17 3 views
0

DAJAX를 통해 POST를 통해 URL이 표시됩니다.메모리 내 이미지를 base64 문자열로 변환 할 때 TypeError가 발생합니까?

URL은 다음 함수로 전달됩니다. TypeError가 throw됩니다.

'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

나는 당신이 contents 이미 이미지 파일의 문자열 표현을 포함 이상

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

으로하지만 라인에서 파일을 다시 읽으려고하기 때문에 ouput.getvalue()을 반환 이해 확실하지 않다. 그리고 그것은 여기에 거의 성가신 어디에 숨겨져 있는지 확인됩니다 NULL 바이트file()에 대해 불평.

이상 줄을 변경 시도 :

data = base64.b64encode(contents) 

은 또한 당신이 StringIO 참조 봐 줄 수 있습니다.

관련 문제