compressing numpy array with zlib + base64 [python] - python

I'm trying to send a numpy array through the python requests module to a flask server.
First, I compressed the numpy array with zlib, then used base64 to encode the data, then tried to decode and decompress but it's not working.
import numpy as np
import base64
import zlib
import requests
frame = np.random.randint(0,255,(5,5,3)) # dummy rgb image
# compress
data = zlib.compress(frame)
print('compressed')
print(data)
print(len(data))
print(type(data))
data = base64.b64encode(frame)
print('b64 encoded')
print(data)
print(len(data))
print(type(data))
data = base64.b64decode(data)
print('b64 decoded')
print(data)
print(len(data))
print(type(data))
data = zlib.decompress(data)
print('b64 decoded')
I'm getting the following error:
Traceback (most recent call last):
File "client.py", line 26, in <module>
data = zlib.decompress(data)
zlib.error: Error -3 while decompressing data: incorrect header check

data = base64.b64encode(frame) should be
b64encode (data)
You’re accidentally encoding the wrong thing ...

I just realized after considering the extra length for base64 encoded string, I can completely get rid of it.
So, the following code snippet does what I need, it compresses the numpy array, then I can get the original array back without using base64. It gets rid of some of the overhead.
import numpy as np
import base64
import zlib
import requests
frame = np.random.randint(0,255,(5,5,3)) # dummy rgb image
# compress
data = zlib.compress(frame)
print('compressed')
print(data)
print(len(data))
print(type(data))
data = zlib.decompress(data)
print('b64 decoded')
data = np.frombuffer(data, dtype=np.uint8)
print(data)
print(type(data))

Related

How to convert Base64 String to image in PYTHON

i am scraping amazon products image but in some time i get base64 string not image link , so i want to convert this string to image .
i tried this code but got error
CODE:
import base64
from PIL import Image
from io import BytesIO
f = open('C:\\Users\\pc\\Desktop\\base64.txt','r')
data = f.read()
im = Image.open(BytesIO(base64.b64decode(data)))
im.save('C:\\Users\\pc\\Desktop\\image.png', 'PNG')
ERROR:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Users\pc\AppData\Local\Programs\Python\Python39\lib\base64.py", line 87, in b64decode
return binascii.a2b_base64(s)
binascii.Error: Invalid base64-encoded string: number of data characters (16369) cannot be 1 more than a multiple of 4
Base64:
data:image/webp;base64,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
i know there are many of questions like this one but i didn't find good answer
This data is not exactly base64 notice the prefix data:
data:image/webp;base64,
This data must be stripped first, then it's valid base64 to be processed as an image.
import base64
from PIL import Image
from io import BytesIO
f = open('C:\\Users\\pc\\Desktop\\base64.txt','r')
data = f.read()
prefix = 'data:image/webp;base64,'
cut = data[len(prefix):]
im = Image.open(BytesIO(base64.b64decode(cut)))
im.save('C:\\Users\\pc\\Desktop\\image.png', 'PNG')

Convert CKAN data API call from bytes into Pandas DataFrame

I am trying to access data.gov.au datasets through their CKAN data API.
Unfortunately, the data API instructions are slightly outdated and do not seem to work. Instructions found here.
So far, I've worked out that I am meant to query the dataset using urllib.request.
import urllib.request
req = urllib.request.Request('https://data.sa.gov.au/data/api/3/action/datastore_search?resource_id=86d35483-feff-42b5-ac05-ad3186ac39de')
with urllib.request.urlopen(req) as response:
data = response.read()
This produces an object of type bytes that looks like a dictionary data structure, where the dataset seems to be stored in "records:".
I'm wondering how I can convert the data records into a Pandas DataFrame. I've tried converting the bytes object into a string and reading that as a json file, but the output is wrong.
# code that did not work
result = str(data, 'utf-8')
rdata = StringIO(result)
df = pd.read_json(rdata)
df
The output I would like to return looks like this:
Thanks!
Here is a solution that works:
import numpy as np
import pandas as pd
import requests
import json
url = "https://data.sa.gov.au/data/api/3/action/datastore_search?resource_id=86d35483-feff-42b5-ac05-ad3186ac39de"
JSONContent = requests.get(url).json()
content = json.dumps(JSONContent, indent = 4, sort_keys=True)
print(content)
df = pd.read_json(content)
df.to_csv("output.csv")
df = pd.json_normalize(df['result']['records'])
You actually were near the solution. It is only the last step df=pd.json_normalize(df['result']['records']) you were missing.

How do I decompress a compressed base64 string?

The following is the string I want to decompress:
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
I have tried zlib:
import zlib
decompressed_data = zlib.decompress(data)
I get the following error:
TypeError: a bytes-like object is required, not 'str'
Then I did:
data = bytes(data, "utf-8")
decompressed_data = zlib.decompress(data)
I get an error again:
Error -3 while decompressing data: incorrect header check
You first need to decode the base64, then zlib decompress:
import zlib, base64
decompressed_data = zlib.decompress(base64.b64decode(data))
Looking at your data, it appears to be UTF-8 encoded XML, so we're almost there:
xml = decompressed_data.decode("utf-8")

How do I compress base64 data using stringIO into a buffer?

Working on this challenge for my Python course and cant seem to figure out how to continue. I think what i have so far is correct but any input would be amazing.
Goal: Decode the base64 blob included below
import base64
import gzip
import StringIO
# This is our base64 encoded string
data = 'H4sIAAAAAAAAAL1X6W+j....'
def main():
# Decode the base64 string into a variable
decoded = base64.b64decode(data)
# Create a variable that holds a stream living in a buffer
# Decompress our stream
# Print it to the screen
if __name__ == '__main__':
main()
Here is a solution with detailed explanation
#Going by the comments in your code
#content of data variable is first gzip compressed and then base64 encoded
#In order to get the original content back, you must,
#first base64 decode and then gzip uncompress it
#since gzip works on file objects, StringIO is to be used
#StringIO module implements a file-like class, that reads and writes a string buffer
import StringIO
import base64
import gzip
data = "...." #gzip compressed => base64 encoded
b64decoded = base64.b64decode(data) # base64 decode
inputstream = StringIO.StringIO();
inputstream.write(b64decoded)
inputstream.seek(0)
#
uncompressGzip = gzip.GzipFile(fileobj=inputstream, mode='rb') # gzip uncompress
originalData = uncompressGzip.read()
print(originalData)
Here is a simple test, compress => encode => decode => uncompress
import StringIO
import base64
import gzip
buf = StringIO.StringIO()
compressGzip = gzip.GzipFile(fileobj=buf, mode="wb")
compressGzip.write("Hello, how are you?")
compressGzip.close()
buf.seek(0)
data = base64.b64encode(buf.getvalue())
# your solution from this point onwards
b64decoded = base64.b64decode(data) # base64 decode
inputstream = StringIO.StringIO();
inputstream.write(b64decoded)
inputstream.seek(0)
#
uncompressGzip = gzip.GzipFile(fileobj=inputstream, mode='rb') # gzip uncompress
originalData = uncompressGzip.read()
print(originalData)

Using python how do I convert an RGB array to an encoded image suitable for transmission via HTTP?

I know I can save an RGB array to a file using
from matplotlib.pyplot import imsave
rgb = numpy.zeros([height,width,3], dtype=numpy.uint8)
paint_picture(rgb)
imsave("/tmp/whatever.png", rgb)
but now I want to write the PNG to a byte buffer instead of a file so I can later transmit those PNG bytes via HTTP. There must be no temporary files involved.
Bonus points if the answer has variations that support formats other than PNG.
Evidently imsave supports "file-like objects" of which io.BytesIO is the one I need:
buffer = BytesIO()
imsave(buffer, rgb)
encoded_png = buffer.getbuffer()
#and then my class derived from BaseHTTPRequestHandler can transmit it as the response to a GET
self.send_response(200)
self.send_header("Content-Type", "image/png")
self.end_headers()
self.wfile.write(encoded_png)
return
If you want to do a file upload (any type of picture)
Send file using POST from a Python script
But if you want to send raw png data you can reread the file and encode it in base64. Your server just have to decode base64 and write the file.
import base64
from urllib.parse import urlencode
from urllib.request import Request, urlopen
array_encoded = ""
with open("/tmp/whatever.png") as f:
array_encoded = base64.encode(f)
url = 'https://URL.COM' # Set destination URL here
post_fields = {'image': array_encoded} # Set POST fields here
request = Request(url, urlencode(post_fields).encode())
responce = urlopen(request).read()
print(responce)
Code not tested!!!!!!!

Categories