Marking Options
EchoMark believes in a defense-in-depth strategy to forensic watermarking so there is no single watermarking algorithm that is applied to a given document. Instead, the developer is given a set of options that control where and how watermarks are placed. Adding more watermarks allows for more robust investigations; , at the cost of slower marking time and increased chance for perceptible issues in the marked content. Mark options do have subtly different interpretations across formats (pdf, image, html) due to the nature of how content is represented. This section will give an overview of those differences and illustrate the options presented to the developer.
For images, html webpages, and pdf documents, mark options are specified in a JSON structure that nests each of the algorithm options above.
| Name | Type | Description |
| recipient | string | An external identifier that uniquely identifies as recipient, i.e., disambiguates name collisions. |
| recipient_name | string | A human readable name that identifies the recipient (can be public). |
| image_watermarking_enabled | boolean | Enables invisible image watermarking on the asset or on embedded image files (e.g., in a pdf). |
| image_watermarking_options | ImageWatermarkingOptions | A json dictionary describing algorithm options for image watermarking. |
| text_watermarking_enabled | boolean | Enables invisible text watermarking that moves textual elements natively. |
| text_watermarking_options | TextWatermarkingOptions | A json dictionary describing optionsfor native watermarking the text layer. |
| visible_watermarking_enabled | boolean | Enables a visible watermark with the specified settings. |
| visible_watermarking_options | VisibleWatermarkingOptions | A json dictionary describing options for a visible watermark. |
Text Watermarking Options
Affects: PDF, HTML
Text watermarking involves embedding watermarks into textual content of each of the formats. This involves subtly adjusting the positioning of textual data in the document. Note that this technique only applies to content that is explicitly text such as PDF text and HTML text. It will not adjust text that happens to be in an image or a vector graphic that happens to look like a letter. This option has an effect for PDF and HTML marking, but will not have an effect for Image marking.
| Name | Type | Description |
| rendering_intent | Options: {“screen”, “download”, “print”} | How the pdf is intended to be displayed. “Screen” will rasterize text if necessary, “download” will keep original file quality, and print will adjust the viewport such that all visible content is in the printable area. T |
Image Watermarking Options
Affects: PDF, Image
Image watermarking involves embedding a forensic watermarking into image content whether directly as image content or as embedded within another file type, such as a PDF. In image watermarking, there are two methods that we can use:
- Luma. Our most robust image watermark is a good general-purpose watermark for scans, text-heavy content, tables, and photographs. It is robust to leaks via printout or low-quality photo. This mark works by applying subtle dilations to various parts of the image, meaning that it can sometimes become noticeable, especially if your image contains repeating geometric patterns or strong diagonal lines.
- Chroma. Our most imperceptible watermark is best for full-color imagery. It can protect colorful photography and artwork without introducing any noticeable changes for viewers. It works well for protecting against leaks via screenshot or high-quality photo, but this method is not robust for leaks via printout or low-quality photo. Since it works by subtly altering color tones in your image, it offers no protection for black-and-white imagery or solid colored imagery such as backgrounds and single-color shapes.
| Name | Type | Description |
| algorithm | Options: {“auto”, “chromatic”, “none”} | The algorithm used for image watermarking. Auto automatically selects a sensible default using luma when appropriate, chromatic only changes colors using the chroma algorithm, none does no watermarking, text watermarks in a way that preserves readability of rasterized text. The default value is “auto” |
| color_distortion_limit | number | The maximum color change introduced by the algorithm in 8-bit color space along each color channel. |
| spatial_distortion_limit | number | The maximum spatial distortion introduced by the algorithm in pixels. Basically, the maximum spatial movement allowed for a single pixel. |
Visible Watermarking Options
Visible watermarks add visible text to your content, such as “Do Not Distribute”. This text can be customized in terms of content, color, opacity, and positioning. Furthermore, there is a macro “{{recipient}}” which can be used to dynamically insert the recipient’s name into the watermark. Note “{{recipient}}” inserts the “recipient_name” field described later in this document. The font used for watermarking is OpenSans which is distributed with the API.
| Name | Type | Description |
| text | string | The text displayed in a visible watermark. The sub-string {{recipient}} can be used to insert a real world recipient name dynamically. |
| position | Options:{“footnote”, “center”} | The position of the visible watermark. footnote places the watermark at the bottom of the document, overlay places the watermark diagonally over the content of the document. |
| color | string | The hexadecimal code for the color of the text. |
| opacity | number | A number between 0 (fully invisible) and 1 (fully opaque). |
Example
For example, the following settings apply all three marking techniques for a recipient named Alice Bar.
{
"recipient": "exployeeid_dwwhijtoarkbmkkz",
"recipient_name": "Alice Bar",
"image_watermarking_enabled": true,
"image_watermarking_options": {
"algorithm": "auto",
"color_distortion_limit": 3,
"spatial_distortion_limit": 5
},
"text_watermarking_enabled": true,
"text_watermarking_options": {
"rendering_intent": "screen"
},
"visible_watermarking_enabled": true,
"visible_watermarking_options": {
"text": "Personalized for {{recipient}}",
"position": "footnote",
"color": "000000",
"opacity": 1
}
}