[docs]defserializer(data):ifhasattr(data,"serialize"):returndata.serialize()ifisinstance(data,str):# return Text(data)returndata# this could be dangerous.ifisinstance(data,list):return[serializer(d)fordindata]# this could be dangerous.ifisinstance(data,tuple):return[serializer(d)fordindata]returndata
# note: we do not need the custom serializer anymore## if isinstance(data, str):# # return Text(data)# return data## # this could be dangerous.# if isinstance(data, Sequence):# return [serializer(d) for d in data]## # this could be dangerous# if isinstance(data, dict):# return {k: serializer(v) for k, v in data.items()}## return data# # raise NotImplementedError(f"Cannot serialize {data}")
[docs]defjpeg(image,quality:int=90):""" base64 encode the image into a string, using JPEG encoding Does not support transparency. """withBytesIO()asbuff:rgb_pil=pil_image.fromarray(image)ifimage.shape.__len__()==2orimage.shape[2]==1:rgb_pil=rgb_pil.convert("L")rgb_pil.save(buff,format="JPEG",quality=quality)returnbuff.getbuffer().tobytes()
[docs]defpng(image):""" base64 encode the image into a string, using PNG encoding """withBytesIO()asbuff:rgb_pil=pil_image.fromarray(image)rgb_pil.save(buff,format="PNG")returnbuff.getbuffer().tobytes()
[docs]defb64jpeg(image,quality:int=90):""" base64 encode the image into a string, using JPEG encoding Does not support transparency. """buff=BytesIO()rgb_pil=pil_image.fromarray(image)ifimage.shape.__len__()==2orimage.shape[2]==1:rgb_pil=rgb_pil.convert("L")rgb_pil.save(buff,format="JPEG",quality=quality)img64=base64.b64encode(buff.getbuffer().tobytes()).decode("utf-8")return"data:image/jpeg;base64,"+img64
[docs]defb64png(image):""" base64 encode the image into a string, using PNG encoding """withBytesIO()asbuff:rgb_pil=pil_image.fromarray(image)rgb_pil.save(buff,format="PNG")img64=base64.b64encode(buff.getbuffer().tobytes()).decode("utf-8")return"data:image/png;base64,"+img64