Wasserzeichen Bild

:information_source: Summary Automatically adds watermarks to user-uploaded images
:hammer_and_wrench: Repository GitHub - Arkshine/discourse-watermark-image
:question: Install Guide How to install a theme or theme component
:open_book: New to Discourse Themes? Beginner’s guide to using Discourse Themes

Install this theme component

Description

This theme component automatically adds watermarks to user-uploaded images. You can use either an image or a QR code as your watermark, with extensive customization options for position, appearance, and distribution patterns.

The component offers granular control through category and user group settings, allowing you to tailor the watermarking behavior to your community’s needs.

Please review the Important Notes section before implementation.

Features

  • High-performance processing using WebAssembly and Web Workers
  • Comprehensive image format support (PNG, JPEG, BMP, ICO, TIFF, WEBP)
  • Dynamic QR code watermark generation
  • Flexible sizing options (relative or absolute)
  • Versatile positioning system
  • Advanced appearance customization (opacity, rotation, scale, margin, etc.)
  • Multiple blending modes
  • Pattern distribution options (single, grid, diagonal, random)
  • Category and user group-specific settings
  • Live preview in settings panel

Settings

Setting Description
image The image to use as watermark.
Supported formats: PNG, JPEG, BMP, ICO, TIFF, WEBP.
Default: ""
size_mode How the watermark size is calculated:
- relative: Size is relative to the target’s image width.
- absolute: Applied at its original size.
Default: "relative"
relative_width The width of the watermark relative to the target image width (in %).
Only applies when the watermark size mode is set to relative.
Range: 1-100
Default: 10
absolute_scale Scale factor for original watermark size (only used in absolute mode). Min: 0.01
Default: 1
max_size Maximum size as percentage of image dimensions. Range: 1-100
Default: 50
position Position of the watermark: top-left, top-center, top-right, center-left, center, center-right, bottom-left, bottom-center, bottom-right
Default: "bottom-right"
margin_x Horizontal margin from the edge (in % of the target image)
Default: 0
margin_y Vertical margin from the edge (in % of the target image)
Default: 0
opacity Watermark opacity. Range: 1-100
Default: 100
rotate Rotation angle.
Range: -360 to 360 degrees
Default: 0
blend_mode How the watermark blends with the image: normal, overlay, over, atop, xor, plus, multiply, burn, difference, soft_light, screen, hard_light, dodge, exclusion, lighten, darken.
Default: "normal"
pattern Watermark repetition pattern: single, grid, diagonal, random
Default: "single"
pattern_allow_partial Allow partial watermarks at image edges
Default: true
pattern_max_count Maximum number of watermark repetitions (0 for infinite)
Default: 50
pattern_spacing Spacing between repeated watermarks (in % of the target image)
Default: 15
qrcode_enabled Enable QR code watermark
Default: false
qrcode_text Text to encode in QR code. Supports placeholders: {homepage}, {username}, {topic_url}
Default: ""
qrcode_color QR code color (hex or CSS variable)
Default: "var(--primary)"
qrcode_background_color QR code background color (hex or CSS variable)
Default: "var(--secondary)"
qrcode_quiet_zone Width of white space border around QR code (0-10 modules)
Default: 2
qrcode_error_correction Error correction level: Low (~7%), Medium (~15%), Quarter (~25%), High (~30%)
More information about error correction levels can be found here.
Default: "Medium"
categories Categories where watermark should be applied.
Default: ""
groups Groups the watermark should be applied to.
Default: "0"
skip_small_images Skip watermarking if image is below min_image_dimensions.
Default: false
min_image_dimensions Minimum dimensions required (width x height)
Default: "200x200"
allow_non_supported_uploads Allow image uploads to continue even when format is not supported
Default: false

Watermark Types

Image

The component supports multiple image formats: PNG, JPEG, BMP, ICO, TIFF, and WEBP.
See the FAQ section for important information about format support limitations.

QR Code

Generate dynamic QR codes with customizable content using these variables:

  • {homepage} - The URL of the homepage
  • {username} - The username of the user
  • {topic_url} - The URL of the topic

Important: When styling QR code watermarks, consider contrast and sizing. Poor contrast ratios or excessive styling can make QR codes unreadable. Always test your QR code watermarks with scanning apps.

Real-Time Preview

The settings panel includes a real-time preview feature, allowing you to see how your watermark configuration affects a sample image instantly.
The preview window offers several interactive features:

  • Resizable and movable preview window
  • Option to load a random sample image
  • Support for uploading your own test images from your device

On the desktop, it opens automatically. You can also open from the button at the bottom of the page:

More images



:warning: Important Notes

  • Original Images Are Not Preserved
    Watermarks are applied before server upload, and original images are not retained. Thoroughly test your watermark settings before deploying to production.

  • If testing in the admin panel, be careful not to validate your settings immediately. I would recommend creating a group or a category to be safe.

FAQ

Why are image formats limited?

While Discourse converts all uploads to JPEG, this TC watermarking occurs pre-upload on the original format, using specific image processing libraries. While post-upload watermarking is possible, it would require multiple upload/download cycles and affect the composer experience. I’m still exploring improvements to this workflow.

Why isn’t text watermarking supported?

Text watermarking would require extensive configuration options (font selection, styling, etc.) that would be difficult to implement effectively without a dedicated interface. Image watermarks provide more flexibility and can be created using existing design tools.

Roadmap

Future development plans may include:

  • Multiple watermark profiles [1]
  • Original image preservation [2]
  • Post-upload watermarking

Credits

This theme component is powered by:


  1. The upload input is partially supported with the Object settings type – it can’t be done in a TC at the moment. ↩︎

  2. May require plugin development. ↩︎

24 „Gefällt mir“

Dies ist die erste Version, und ich erwarte fehlende Funktionen. Ich freue mich auf jedes Feedback! :+1:

7 „Gefällt mir“

Danke für die Komponente. Verarbeitet diese Komponente Bilder? Komprimiert diese Komponente Bilder besser als das Original?

5 „Gefällt mir“

Die Komponente führt keine Modifikationen oder Komprimierungen durch, abgesehen vom Anwenden des Wasserzeichens.

Discourse verarbeitet das Bild bereits vorab (mithilfe der squoosh-Bibliothek) → das Wasserzeichen wird angewendet → Das Bild wird auf den Server hochgeladen. So würde es funktionieren.

6 „Gefällt mir“


Wenn Sie einen Beitrag zum ersten Mal öffnen und bearbeiten, können Sie kein Wasserzeichen darauf setzen. Sie müssen ihn veröffentlichen und dann auf „Beitrag bearbeiten“ klicken und ein Bild hochladen, um ein Wasserzeichen darauf zu setzen.
Das verwendete Thema ist FKB Pro - Social theme - #375 by MihirR

2 „Gefällt mir“

Sie meinen, wenn Sie einen vorhandenen Beitrag zum ersten Mal öffnen/bearbeiten und ein Bild hochladen, gibt es keine Wasserzeichen. Ist das richtig? Können Sie es jedes Mal reproduzieren? Sehen Sie Fehler in der Browserkonsole?

Wenn ich Sie richtig verstehe, erwarten Sie, dass ein vorhandenes, hochgeladenes Bild (vor dieser TC-Installation) ein Wasserzeichen hat, wenn Sie den Beitrag bearbeiten (oder eine Möglichkeit haben, das Bild manuell mit einem Wasserzeichen zu versehen). So funktioniert es nicht. Sie müssen das Bild hochladen, um ein Wasserzeichen anzuwenden.

Eine Schaltfläche zum manuellen Wasserzeichen für ein ausgewähltes Bild könnte eine Funktion sein. Würde das für Sie funktionieren?

Es sind die Bilder, die nach dem Erstellen eines neuen Beitrags hochgeladen werden und kein Wasserzeichen haben. Es sind die Bilder, die nach dem Aufrufen des Beitrags nach dem Veröffentlichen und Klicken auf Bearbeiten hochgeladen werden, die das Wasserzeichen haben.

Für den Beitragsbutton verwende ich Compose Center - #13

Können Sie bitte ein kurzes Video erstellen? Das wäre nützlich, um zu sehen und zu verstehen, was passiert.

1 „Gefällt mir“

3 „Gefällt mir“

Danke für Ihre Geduld! Ich habe das Problem gefunden. Es sollte jetzt behoben sein! :+1:

3 „Gefällt mir“

Ich erhalte diesen Fehler bei der Installation dieser Komponente

Đã xảy ra lỗi: Error creating upload asset: worker_photon_wasm. Original filename Sorry, the file you are trying to upload is not authorized (authorized extensions: jpg, jpeg, png, woff, woff2, svg, eot, ttf, otf, gif, js, dwg).

1 „Gefällt mir“

Das ist seltsam. Welche Discourse-Version verwendest du?
Du könntest versuchen, die wasm-Erweiterung zu den erlaubten Listen hinzuzufügen, aber sie funktioniert bei mir lokal und in zwei Produktionsinstallationen ohne Änderungen. :thinking:

1 „Gefällt mir“

Ich werde Ihnen ein Feedback geben. Ich weiß nicht, was los ist, aber es scheint, dass chinesische Benutzer keine Wasserzeichen auf ihren hochgeladenen Bildern haben.

Aber ich benutze ein neu erstelltes Konto mit aktiviertem No-Trace-Modus und es funktioniert, daher weiß ich nicht, was das Problem ist.

Manchmal funktioniert es, manchmal nicht.

Die heruntergenommenen Bilder sind .jpeg .png Aber genau wie das Bild im Video kopiere ich das Bild und lade es hoch und es ist mit einem Wasserzeichen versehen, daher weiß ich nicht, was das Problem ist.

Danke für das Feedback!

Bei Ihnen funktioniert es immer, egal wie Sie es versuchen, richtig?

Können Sie einige Ihrer Benutzer bitten, die Browserkonsole zu überprüfen, falls dies geschieht, und Ihnen jede Fehlermeldung zu kopieren, die sie sehen? Auch ob sie ein Mobilgerät (Android, iPhone usw.) verwenden – Wenn sie erklären können, was sie genau getan haben, um zu sehen, ob es helfen kann, wäre das willkommen.

Es scheint kein Problem mit dem Bild selbst zu sein, wenn Sie das Bild später selbst mit einem Wasserzeichen versehen können. Was übrig bleibt, ist entweder ein Fehler im Code wie beim vorherigen Problem oder ein Fehler im Wasserzeichenprozess. Leider kann ich es nicht reproduzieren, egal was ich tue.

Ich werde sehen, ob ich die Komponente später aktualisiere, um sicherzustellen, dass alle Fehler abgefangen und dem Benutzer angezeigt werden.

Hallo, danke, dass Sie diese Komponente erstellt haben.
Als ich versuchte, ein Wasserzeichenfoto hochzuladen, trat dieser Fehler auf. Ich habe es mit JPEG und Webp versucht, aber ohne Erfolg.

Mein Discourse-Forum ist auf dem neuesten Stand

1 „Gefällt mir“

Hallo @LaptechInfo

Das ist seltsam. An diesem Punkt sollte der TC nichts tun. Dies ist die Standard-Upload-Einstellung.
Können Sie die Konsole des Browsers überprüfen und sehen, ob Fehlermeldungen angezeigt werden?

Ist es möglich, ein Bild bereitzustellen, das fehlschlägt, damit ich es auch auf meiner Seite testen kann?

1 „Gefällt mir“

Hallo, ich habe viele Bilder zufällig ausprobiert, aber keines davon hat funktioniert.
Ich bin kein Programmierer und habe keine Kenntnisse in irgendeiner Computersprache.
Probieren Sie dieses Bild, ich bin müde.
laptechinfo webp.zip (558 Bytes)
watermark.zip (257,7 KB)

@Arkshine

1 „Gefällt mir“

Danke! Können Sie auch den Inhalt Ihrer Konsole anzeigen? Der Tab direkt danach. Ich denke, das könnte helfen.

EDIT: Ich glaube, ich kann es reproduzieren, lassen Sie mich sehen, und ich melde mich bald wieder!

Konsole-Tab


@Arkshine

@LaptechInfo Danke! Es gibt einen Fehler in Discourse von einem PR gestern. Ich habe ein Thema erstellt: Can't upload image in settings. :+1:

3 „Gefällt mir“