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.