NAME

Acme::Steganography::Image::Png - hide data (badly) in Png images

SYNOPSIS

use Acme::Steganography::Image::Png;

# Write your data out as RGB PNGs hidden in the image "Camouflage.jpg"
my $writer = Acme::Steganography::Image::Png::RGB::556->new();
$writer->data(\$data);
my @filenames = $writer->write_images("Camouflage.jpg");
# Returns a list of the filenams it wrote to

# Then read them back.
my $reread =
   Acme::Steganography::Image::Png::RGB::556->read_files(@files);

DESCRIPTION

Acme::Steganography::Image::Png is extremely ineffective at hiding your secrets inside Png images.

There are 3 implementations

Acme::Steganography::Image::Png::FlashingNeonSignGrey

Blatantly stuffs your data into greyscale PNG files with absolutely no attempt to hide it.

Acme::Steganography::Image::Png::RGB::556

Stuffs your data into a sample image, using the low order bits of each colour. 2 bytes of your data are stored in each pixel, 5 bits in Red and Green, 6 in Blue. It produces a rather grainy image.

Acme::Steganography::Image::Png::RGB::323

Also stuffs your data into a sample image, using the low order bits of each colour. Only 1 byte of your data is stored in each pixel, 3 bits in Red and Blue, 2 in Green. To the untrained eye the image looks good. But the fact that it's PNG will make anyone suspicious about the contents.

Write your data out by calling write_images

Read your data back in by calling read_files

You don't have to return the filenames in the correct order.

BUGS

Virtually no documentation. There's the source code...

Not very many tests.

Not robust against missing files when re-reading

If you want real steganography, you're in the wrong place.

Doesn't really do enough daft stuff yet to live up to being a proper Acme module. There are plans.

AUTHOR

Nicholas Clark <nick@talking.bollo.cx>, based on code written by JCHIN after a conversation we had.