Marca de agua en la imagen

: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 Me gusta

Esta es la primera versión y espero que falten funciones. ¡Espero sus comentarios! :+1:

7 Me gusta

Gracias por el componente. ¿Procesa imágenes este componente? ¿Comprime este componente las imágenes a un tamaño mejor que el original?

5 Me gusta

El componente no realiza ninguna modificación ni compresión aparte de aplicar la marca de agua.

Discourse ya preprocesa la imagen primero (usando la biblioteca squoosh) → se aplica la marca de agua → La imagen se sube al servidor. Así es como funcionaría.

6 Me gusta


La primera vez que abres una publicación y la editas, no puedes ponerle una marca de agua, necesitas publicarla y luego hacer clic en editar publicación y subir una imagen para ponerle una marca de agua.
El tema utilizado es FKB Pro - Social theme - #375 by MihirR

2 Me gusta

¿Quieres decir que si abres/editas una publicación existente por primera vez y subes una imagen, no hay marca de agua. ¿Es correcto? ¿Puedes reproducirlo siempre? ¿Ves algún error en la consola del navegador?

Si entiendo correctamente, esperas que una imagen existente subida (antes de esta instalación de TC) tenga una marca de agua cuando editas la publicación (o tengas una forma de añadir una marca de agua a la imagen manualmente). No funciona de esa manera. Necesitas subir la imagen para aplicar una marca de agua.

Tener un botón para añadir una marca de agua a una imagen seleccionada manualmente podría ser una característica. ¿Te funcionaría eso?

Son las imágenes subidas después de crear una nueva publicación las que no tienen marca de agua. Son las imágenes subidas después de entrar en la publicación después de publicar y hacer clic en editar las que tienen la marca de agua.

Para el botón de publicación, utilizo Compose Center - #13

¿Puedes hacer un video rápido, por favor? Sería útil para ver y entender lo que está pasando.

1 me gusta

3 Me gusta

¡Gracias por tu paciencia! He encontrado el problema. ¡Ya debería estar solucionado! :+1:

3 Me gusta

Me da este error al instalar este componente

Đã xảy ra lỗi: Error creating upload asset: worker_photon_wasm. Original filename Lo sentimos, el archivo que intentas subir no está autorizado (extensiones autorizadas: jpg, jpeg, png, woff, woff2, svg, eot, ttf, otf, gif, js, dwg).

1 me gusta

Eso es extraño. ¿Cuál es tu versión de Discourse?
Puedes intentar agregar la extensión wasm en las listas permitidas, pero funciona bien en mis instalaciones locales y en dos instalaciones de producción sin ningún cambio. :thinking:

1 me gusta

Voy a darte algunos comentarios, no sé qué está pasando, pero parece que los usuarios chinos no tienen marcas de agua en sus imágenes subidas.

Pero estoy usando una cuenta recién creada con ese modo sin rastro activado y está funcionando, así que no sé cuál es el problema.

A veces funciona, a veces no.

Las imágenes que se eliminan son .jpeg .png Pero al igual que la imagen del video, copio la imagen y la subo y tiene marca de agua, así que no sé cuál es el problema.

¡Gracias por tus comentarios!

Para ti, no importa cómo lo intentes, siempre funciona, ¿verdad?

¿Puedes pedir a algunos de tus usuarios que revisen la consola del navegador si sucede y te copien cualquier mensaje de error que vean? También, si están usando un dispositivo móvil (android, iphone, etc.) - Si pueden explicar qué hicieron exactamente para ver si puede ayudar, sería bienvenido.

No parece ser un problema con la imagen en sí si puedes agregar una marca de agua a la imagen tú mismo más tarde. Lo que queda es un error en el código, como el problema anterior, o un error en el proceso de marca de agua. Desafortunadamente, no puedo reproducirlo sin importar lo que haga.

Me aseguraré de actualizar el componente más tarde para garantizar que se capturen y se muestren al usuario todos los errores.

Hola, gracias por crear este componente.
Cuando intenté subir la foto de la marca de agua, aparece este error. Probé con JPEG y Webp también, pero todavía no tuve suerte.

Mi foro de Discourse está actualizado

1 me gusta

Hola @LaptechInfo

Eso es extraño. En este punto, el TC no debería hacer nada. Esta es la configuración de carga estándar.
¿Puedes mirar la consola del navegador y ver si hay algún mensaje de error?

¿Es posible que proporciones una imagen que falle para que yo también pueda probarla?

1 me gusta

Hola, probé muchas imágenes al azar, pero ninguna funcionó.
No soy programador, no tengo conocimientos de ningún lenguaje informático.
Prueba esta imagen, lo intenté.
laptechinfo webp.zip (558 Bytes)
watermark.zip (257.7 KB)

@Arkshine

1 me gusta

¡Gracias! ¿Puedes también mostrar el contenido de tu consola? La pestaña justo después. Creo que podría ayudar.

EDITAR: Creo que puedo reproducirlo, déjame ver y te responderé pronto.

Pestaña de consola


@Arkshine

@LaptechInfo ¡Gracias! Hay un error en Discourse de una PR de ayer. Creé un tema: Can't upload image in settings. :+1:

3 Me gusta