Skip to content

tslater2006/PngWatermarker

Repository files navigation

#PngWatermarker

PngWatermarker is a .NET 4.5+ library for the embedding and extraction of invisible watermarks on PNG files.

It makes use of the lovely pngcs library for decoding/encoding of the PNG files, the library was written by Hernán J. González, which is available here: https://code.google.com/p/pngcs/

##Features

  • Embed various watermarks into PNG files
  • Extract the watermarks at a later time
  • A watermarked image is almost impossible to distinguish.
  • Clever embedding process ensures the watermark is not stored in a sequential pattern

##Watermark Types

###Basic

  • Text Watermark
  • Allows for the storage of a String.
  • File Watermark
  • Allows for the storage of a file, preserving the original extension.
  • Binary Watermark
  • Allows for the storage of binary data.

###Advanced

  • Composite Watermark
  • Allows for the storage of 1 to many basic watermarks as a single watermark in the image.
  • Encrypted Watermark
  • Allows for the encryption and storage of any watermark (except other Encrypted Watermarks).
  • Encryption is performed by any SymmetricAlgorithm subclass.

##Examples

###Text Watermark

PNGFile file = new PNGFile("MyOriginal.png");
TextWatermark mark = new TextWatermark("This is a text based watermark");

Watermarker.EmbedWatermark(file,mark,"password","MyOutput.png");

//Extraction

file = new PNGFile("MyOutput.png");
TextWatermark extract = Watermarker.ExtractWatermark<TextWatermark>(file,"password");

###Composite Watermark

PNGFile file = new PNGFile("MyOriginal.png");

CompositeWatermark comp = new CompositeWatermark();
FileWatermark fileMark = new FileWatermark("MyFile.txt");
BinaryWatermark binMark = new BinaryWatermark(new byte[]{1,2,3,4});

comp.AddWatermark(fileMark);
comp.AddWatermark(binMark);

Watermarker.EmbedWatermark(file,comp,"password","MyOutput.png");

//Extraction
PNGFile file2 = new PNGFile("MyOutput.png");

CompositeWatermark extract = Watermarker.ExtractWatermark<CompositeWatermark>(file2,"password");
Watermark[] marks = extract.GetWatermarks();

###Encrypted Watermark

PNGFile file = new PNGFile("MyOriginal.png");
RijndaelManaged aes = new RijndaelManaged();
aes.Padding = PaddingMode.Zeroes;
EncryptedWatermark.Algorithm = aes;
TextWatermark mark = new TextWatermark("This should be encrypted");
EncryptedWatermark encrypted = new EncryptedWatermark(mark, "super-secret");

Watermarker.EmbedWatermark(file, encrypted, "password", "MyOutput.png");

PNGFile file2 = new PNGFile("MyOutput.png");

EncryptedWatermark extract = Watermarker.ExtractWatermark<EncryptedWatermark>(file2, "password");

TextWatermark decrypted = extract.Decrypt<TextWatermark>("super-secret");

Original File

Original File

File holding a watermark

Watermarked File

githalytics.com alpha

About

PNG watermarking library for .NET 4.5+

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages