Skip to content

Insert binary data from a file into a PNG image file and reversely extract to same binary data from the PNG (without loading the whole thing to memory).

Notifications You must be signed in to change notification settings

iagustsson/bin2png

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 

Repository files navigation

bin2png

This class is a utility to insert binary data from a file into a PNG image and export the image to a file without keeping the whole binary data (or the whole image) in memory at any given time. This class also implements the reverse process, i.e. it can extract the binary data from a PNG file, and output the binary data to a file, again without ever keeping the whole image (or the binary data) in memory at any given time.

When embedding the binary data into the PNG, the

Binary to PNG: The binary data is inserted as the color information of the PNG image. Each 3-byte block of the binary data is interpreted as an RGB value of a pixel using the ARGB color model, where the alpha channel is always 0xFF. In case the # of bytes in binary data is not a multiple of 3, the last two bytes, or the last one byte, are interpreted as two colors, or one color, with the alpha channel 0xFE, or 0xFD, respectively. The rest of the pixel data is simply for padding purposes with alpha channel 0x00, so that the image is rectangular with a default width of 32 KiB (32768) and calculated height such that 3heightwidth ≥ # of bytes. The binary data is read in the same order as it is found in the file.

PNG to binary: The use of the alpha channel allows the extraction utility to differentiate between pixels that contain data (alpha=0xFF, 0xFE, 0xFD, depending on if there are 3, 2 or 1 bytes of data embedded in the pixel) and those pixels that are simply there to pad the image to provide it with a rectangular shape (alpha=0x00). The binary data is written in the same order as it is found in the image.

The class can be downloaded with

git clone https://github.com/iagustsson/bin2png

within the directory bin2png, the class is compiled with

javac -d mods/com.iagustsson.bin2png src/com.iagustsson.bin2png/module-info.java src/com.iagustsson.bin2png/com/iagustsson/bin2png/Bin2PNG.java src/com.iagustsson.bin2png/com/iagustsson/bin2png/SimpleRenderedImage.java

and run by

java --module-path mods -m com.iagustsson.bin2png/com.iagustsson.bin2png.Bin2PNG

or for inserting a 10 GiB binary file into a PNG (resulting in a ~11.5 GiB file) and back

java --module-path mods -m com.iagustsson.bin2png/com.iagustsson.bin2png.Bin2PNG -bin big10G.bin -png big10G.png -out copyof_big10G.bin

(try comparing the binary files, e.g. using diff -s big10G.bin copyof_big10G.bin, and they are identical).

About

Insert binary data from a file into a PNG image file and reversely extract to same binary data from the PNG (without loading the whole thing to memory).

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages