How to encode and store images in PysonDB.

How to encode and store images in PysonDB.

Fredy Somy's photo
Fredy Somy

Published on Dec 5, 2020

4 min read

Subscribe to my newsletter and never miss my upcoming articles

Many of us find it difficult to add image to a database. PysonDB solves most of your problems now i will be showing how to store image in PysonDB

What are we doing today:

  • We are going to encode a image and then decode it.
  • Then we are going to store it in PysonDB.

Prerequisites

  • Install pysondb via pip
    pip install pysondb
    

Lets get started.

We are having a image as below.


file2son.png Alt Text

We are going to encode it.

  • We need to import base64 module first.
  • It handles the base64 encoding of image.
from pysondb import db 
import base64
from PIL import Image
from io import BytesIO

x=db.getDb("fs.json")
def addimage(fi,name):
  with open(fi,"rb") as dataimg:
    raw_data=base64.b64encode(dataimg.read())
    x.add({"data":raw_data.decode('utf-8'),"name":name})

addimage("file2son.png","image12")
  • We are importing pysondb,bas64
  • Other two will be handled soon.
    x=db.getDb("fs.json")
    
  • This creates or connects a Json database named fs.json
  • If you dont know pysonDB read this

def addimage(fi,name):
  with open(fi,"rb") as dataimg:
    raw_data=base64.b64encode(dataimg.read())
    x.add({"data":raw_data.decode('utf-8'),"name":name})

addimage("file2son.png","image12")
  • We are opening a file ( here file2son.png ) in read,binary mode as dataimg.
raw_data=base64.b64encode(dataimg.read())
  • This encodes all data in dataimg in base64 format.
 x.add({"data":raw_data.decode('utf-8'),"name":name})
  • This piece of code stores data in pysondb database .
  • See that the raw_data after encoding is decoded in 'utf-8' format.
  • Else error is shown.

So finally we have the data in fs.json database.

Lets get back the image

def getimage(filename,name):
  img_data=x.getBy({"name":name})
  img=Image.open(BytesIO(base64.b64decode(img_data[0]['data2'])))
  img.save(filename,"PNG")

getimage("file.png","image12")
img_data=x.getBy({"name":name})
  • This piece of code gets the base64 data from fs.json with the provided name.
img=Image.open(BytesIO(base64.b64decode(img_data[0]['data2'])))
  • Here we are Using Image from pillow (PIL) module.
  • What this code does is:
    • Opens the base64 data from fs.json
    • And BytesIO converts the data into a byte stream which is caught by the Image function and assigned to img variable.
img.save(filename,"PNG")
  • This saves the img in filename (here file.png ) in PNG format
  • You have file.png in the directory which was encoded and decoded.

Whole Code

from pysondb import db
import base64
from PIL import Image
from io import BytesIO

x=db.getDb("fs.json")
def addimage(fi,name):
  with open(fi,"rb") as data:
    raw_data=base64.b64encode(data.read())
    x.add({"data":raw_data.decode('utf-8'),"name":name})


addimage("file2son.png","image12")
# addimage() is used to add file2son.png image in database with name as image12

def getimage(filename,name):
  img_data=x.getBy({"name":name})
  img=img_data[0]['data2'].decode('base64'))
  img.save(filename,"PNG")
getimage("file.png","image12")
# getimage is used to retrieve the stored image of name image12 and get it as file.png

Thats for today,Follow for more blogs.

Have any doubts or am i wrong anywhere,please comment here. So that i can correct it.

 
Share this