Pixel height based data encoding, not the preferred/efficient way of encoding data but yet another experiment with pixels.
PIL
- for reading pixels and info ( pip install PIL
)
Usage
python3 writer.py <out image> <string / text file>
( The high-pix encoded version of the inital writer.py
)
Usage
python3 reader.py <in image> -q # -q for text only output
( The high-pix encoded version of the inital reader.py
)
I was thinking of a way to store data in pixels. Then I suddenly thought about the height of the image and what if we could just represent the data in pixel height of each column ( y height). More like a tiny version of graph. X
represents each character and Y
represents the value of the current X pixel. The images have a margin of 1 px and the "non-black" pixels get ignored.
NOTE : This uses base64(utf-8) to represent values from 0-63
- At start, it jumps to the
y
pixel before the final pixel ( y = height - 1) and the pixel after the initial pixel ( x = 1 ). - Checks if the pixel is black ( which means it represents 1 ), moves one pixel up in the
y
pixel row by one ( y = y - 1) and increments the counter by 1 ( n = n + 1 ) - This loop (while) continues while the pixel is black in color
- If the current pixel is not black; it stops the loop, appends the counter value ( e.g 5 ) to the character list array and moves to the next pixel in
x
column and starts the same process as mentioned above. - This process continues till it reaches the end of the image width ( x_max = width - 1 )
- Data is written or read using the character list array ( e.g [ 22, 56, 54...] ) and then converted to it's base64 value by the array present which acts as a map.
Well, this specific project serves no purpose other than being an experiment nor meant to be considered serious. I was learning how pixels works and thought of this idea to experiment with the dimensional iteration with an interesting concept to implement.