Skip to main content
warning

There is a pending German patent application with the application number 10 2023 125 012.4. In order to use the TREND watermarker Software in the form published here, a patent license is required in addition to the license for the Software. See LICENSE for more information. In case of any questions or uncertainties, please contact us at trend@isst.fraunhofer.de.

Watermarker

Differentiation: Watermarking vs. Watermarks

  • Watermark: the content that gets inserted into a cover file/data
  • Watermarking: the algorithm/strategy to insert a watermark into a cover file/data

Our library can insert arbitrary bytes (watermarks) into all supported file types/data (cover). If your watermark does not align with bytes, you must integrate your own padding scheme.

We also developed a strategy to support creating and parsing watermarks. This is completely optional, you can choose to use our strategy or create your own. Below, you can find an example for our strategy to create and parse watermarks that contain text as content.

General Information

The library is designed to allow watermarking bytes into any support file type or data. However, the current development focus is on watermarking plain text and is currently the only fully supported file type. If you want to integrate your own watermarking schema, you can easily integrate it into our library. See the Development section of the watermarker for more details.

TextWatermarker Customizations

The TextWatermarker is designed to allow customizing its behavior in many ways:

  • changing how watermarks are separated
    • empty insert position
    • one char between watermarks
    • one char at the beginning of a watermark and another at the end
  • changing the transcoding
    • the transcoding converts the watermark bytes into characters and back

However, we do not provide preconfigured configuration options for these adjustments, you have to read the code and then create your own implementaitons.

Kotlin Library: Special Characteristics

Kotlin uses so-called companion objects to provide static function. Most of our classes are providing static functions to create an instance instead of a constructor. To create an instance of such a class in Java or JavaScript, you must not use the new operated. Instead, you have to use ClassName.Companion.someInstantiationFunction(..). See Java Example of Main.java for an example.