Search code examples
pythondjangoqr-code

Saving a QR Code in django python as base64 for to_artistic method


I would like to save my QR Code from the to_artistic method.

For my other qr codes I have been doing:

buffer = io.BytesIO()
qr_img.save(buffer, format="PNG")
qr_code = "data:image/png;base64,"+base64.b64encode(buffer.getvalue()).decode("utf-8")
                

How can I do this for qr.to_artistic? Documentation: https://segno.readthedocs.io/en/latest/web-development.html

Thanks!


Solution

  • You can pass a file-like object to the target, so:

    import segno
    
    qr = segno.make('The Beatles -- Abbey Road', error='h')
    
    buffer = io.BytesIO()
    qr.to_artistic(
        background='my_background.gif',
        target=buffer,
        scale=4,
        kind='gif'
    )
    qr_code = 'data: image/gif;base64, '+base64.b64encode(buffer.getvalue()).decode('utf-8')

    You need to specify the kind=… parameter, otherwise the library will try to derive this from the filename, but since you use a BytesIO object, this has no filename.