水印图片

:information_source: 摘要 自动为用户上传的图片添加水印
:hammer_and_wrench: 代码仓库 GitHub - Arkshine/discourse-watermark-image · GitHub
:question: 安装指南 如何安装主题或主题组件
:open_book: Discourse 主题新手? Discourse 主题使用入门指南

安装此主题组件

描述

此主题组件会自动为用户上传的图片添加水印。您可以使用图片或二维码作为水印,并提供丰富的自定义选项,包括位置、外观和分布模式。

该组件通过分类和用户组设置提供细粒度的控制,使您能够根据社区需求定制水印行为。

请在实施前查阅 重要说明 部分。

功能特性

  • 利用 WebAssemblyWeb Workers 实现高性能处理
  • 全面支持多种图片格式(PNG、JPEG、BMP、ICO、TIFF、WEBP)
  • 动态生成二维码水印
  • 灵活的尺寸选项(相对或绝对)
  • 多功能定位系统
  • 高级外观自定义(不透明度、旋转、缩放、边距等)
  • 多种混合模式
  • 多种分布模式(单个、网格、对角线、随机)
  • 针对特定分类和用户组的设置
  • 设置面板中的实时预览

设置项

设置项 说明
image 用作水印的图片。
支持的格式:PNG、JPEG、BMP、ICO、TIFF、WEBP。
默认值:""
size_mode 水印尺寸的计算方式:
- relative:尺寸相对于目标图片宽度。
- absolute:按原始尺寸应用。
默认值:"relative"
relative_width 水印宽度相对于目标图片宽度的百分比。
仅在水印尺寸模式设置为 relative 时生效。
范围:1-100
默认值:10
absolute_scale 原始水印尺寸的缩放因子(仅在绝对模式下使用)。最小值:0.01
默认值:1
max_size 最大尺寸占图片尺寸的百分比。范围:1-100
默认值:50
position 水印位置:top-lefttop-centertop-rightcenter-leftcentercenter-rightbottom-leftbottom-centerbottom-right
默认值:"bottom-right"
margin_x 水平边距(占目标图片的百分比)
默认值:0
margin_y 垂直边距(占目标图片的百分比)
默认值:0
opacity 水印不透明度。范围:1-100
默认值:100
rotate 旋转角度。
范围:-360 到 360 度
默认值:0
blend_mode 水印与图片的混合模式:normaloverlayoveratopxorplusmultiplyburndifferencesoft_lightscreenhard_lightdodgeexclusionlightendarken
默认值:"normal"
pattern 水印重复模式:singlegriddiagonalrandom
默认值:"single"
pattern_allow_partial 允许图片边缘出现部分水印
默认值:true
pattern_max_count 水印重复的最大数量(0 表示无限)
默认值:50
pattern_spacing 重复水印之间的间距(占目标图片的百分比)
默认值:15
qrcode_enabled 启用二维码水印
默认值:false
qrcode_text 二维码编码的文本。支持占位符:{homepage}{username}{topic_url}
默认值:""
qrcode_color 二维码颜色(十六进制或 CSS 变量)
默认值:"var(--primary)"
qrcode_background_color 二维码背景颜色(十六进制或 CSS 变量)
默认值:"var(--secondary)"
qrcode_quiet_zone 二维码周围的白色边框宽度(0-10 个模块)
默认值:2
qrcode_error_correction 纠错等级:Low(约 7%)、Medium(约 15%)、Quarter(约 25%)、High(约 30%)
有关纠错等级的更多信息,请点击此处
默认值:"Medium"
categories 应用水印的分类。
默认值:""
groups 应用水印的用户组。
默认值:"0"
skip_small_images 如果图片尺寸小于 min_image_dimensions,则跳过水印处理。
默认值:false
min_image_dimensions 所需的最小尺寸(宽 x 高)
默认值:"200x200"
allow_non_supported_uploads 即使格式不受支持,也允许继续上传图片
默认值:false

水印类型

图片

该组件支持多种图片格式:PNG、JPEG、BMP、ICO、TIFF 和 WEBP。
有关格式支持限制的详细信息,请参阅常见问题部分。

二维码

使用以下变量生成动态二维码,内容可自定义:

  • {homepage} - 主页 URL
  • {username} - 用户名
  • {topic_url} - 主题 URL

重要提示:在设计二维码水印时,请考虑对比度和尺寸。对比度过低或过度样式化可能导致二维码无法识别。请务必使用扫描应用程序测试您的二维码水印。

实时预览

设置面板包含实时预览功能,可让您即时查看水印配置对示例图片的影响。
预览窗口提供多种交互功能:

  • 可调整大小和移动的预览窗口
  • 可加载随机示例图片的选项
  • 支持从您的设备上传测试图片

在桌面端,预览窗口会自动打开。您也可以点击页面底部的按钮打开:

更多图片



:warning: 重要说明

  • 原始图片不会被保留
    水印在服务器上传前应用,原始图片不会被保留。在部署到生产环境之前,请务必彻底测试您的水印设置。

  • 如果在管理面板中进行测试,请小心不要立即验证您的设置。建议创建一个组或分类以确保安全。

常见问题

为什么图片格式有限制?

虽然 Discourse 会将所有上传转换为 JPEG,但此主题组件的水印处理是在上传前对原始格式进行的,使用了特定的图像处理库。虽然可以在上传后进行水印处理,但这需要多次上传/下载循环,并会影响编辑器体验。我仍在探索改进此工作流程的方法。

为什么不支持文本水印?

文本水印需要大量的配置选项(字体选择、样式等),如果没有专用界面,很难有效实现。图片水印提供了更大的灵活性,并且可以使用现有的设计工具创建。

开发路线图

未来的开发计划可能包括:

  • 多个水印配置文件 [1]
  • 保留原始图片 [2]
  • 上传后水印处理

致谢

本主题组件由以下技术支持:


  1. 上传输入部分支持 对象设置类型——目前无法在主题组件中实现。 ↩︎

  2. 可能需要开发插件。 ↩︎

24 个赞

这是第一个版本,我预计会缺少一些功能。期待您的任何反馈! :+1:

7 个赞

感谢您的组件。此组件是否处理图像?此组件是否能将图像压缩到比原始图像更好的尺寸?

5 个赞

该组件除了应用水印外,不执行任何修改或压缩。

Discourse 会先预处理图像(使用 squoosh 库)-> 应用水印 → 上传图像到服务器。它的工作原理就是这样。

6 个赞


第一次打开帖子并编辑时,您无法添加水印,需要先发布帖子,然后点击“编辑帖子”并上传图片才能添加水印。
使用的主题是 FKB Pro - Social theme - #375 by MihirR

2 个赞

您的意思是,如果您第一次打开/编辑现有帖子并上传图片,则没有水印。这正确吗?您每次都能重现它吗?您在浏览器的控制台中看到任何错误吗?

如果我理解正确,您期望在编辑帖子时,一个已上传的现有图片(在此 TC 安装之前)会带有水印(或者有手动添加水印的方法)。它不是这样工作的。您需要上传图片才能应用水印。

提供一个手动为选定图片添加水印的按钮可能是一个功能。这对您有用吗?

新帖子创建后上传的图片没有水印,但发帖后进入帖子点击编辑上传的图片却有水印。

对于发帖按钮,我使用的是 Compose Center - #13

请问您能快速制作一个视频吗?这样有助于我们看到和理解正在发生的事情。

1 个赞

3 个赞

感谢您的耐心等待!我找到了问题所在。现在应该已经修复了! :+1:

3 个赞

安装此组件时出现此错误

发生错误:创建上传资产时出错:worker_photon_wasm。原始文件名抱歉,您尝试上传的文件未获授权(授权扩展名:jpg、jpeg、png、woff、woff2、svg、eot、ttf、otf、gif、js、dwg)。

1 个赞

这很奇怪。您的 Discourse 版本是什么?

您可以尝试在允许列表中添加 wasm 扩展名,但在我的本地和两个生产安装中,它在没有任何更改的情况下都能正常工作。:thinking:

1 个赞

我将提供一些反馈,我不知道发生了什么,但似乎中国用户上传的图片没有水印。

但我使用的是一个新创建的、已开启无痕模式的账户,而且它正在工作,所以我不知道问题出在哪里。

有时有效,有时无效。

下载的图片是.jpeg .png格式。但就像视频中的图片一样,我复制图片并上传它,它就有水印,所以我不知道问题出在哪里。

感谢您的反馈!

对您来说,无论您怎么尝试,它总是能正常工作,对吧?

您能否请一些您的用户在出现问题时检查浏览器的控制台,并将他们看到的任何错误消息复制给您?另外,他们是否使用的是移动设备(Android、iPhone 等)——如果他们能解释他们具体做了什么,也许能有所帮助,我们将不胜感激。

如果之后您自己能够为图片添加水印,那看起来就不像是图片本身的问题了。剩下的要么是像之前那样代码中的错误,要么是水印处理过程中的错误。不幸的是,无论我怎么做都无法重现它。

我将着手更新该组件,以确保任何错误都能被捕获并显示给用户。

您好,感谢您制作此组件。
当我尝试上传水印照片时,出现此错误。我尝试了 JPEG 和 Webp,但仍然无效。

我的 Discourse 论坛是最新的

1 个赞

您好 @LaptechInfo

这很奇怪。此时,TC 应该什么都不做。这是标准的上传设置。
您能否查看浏览器的控制台,看看是否有任何错误消息?

您能否提供一张失败的图片,以便我也能在我的这边进行测试?

1 个赞

您好,我尝试了许多随机图片,但没有一张起作用。
我不是程序员,不懂任何计算机语言。
请尝试这张图片,我已尽力。
laptechinfo webp.zip (558 Bytes)
watermark.zip (257.7 KB)

@Arkshine

1 个赞

谢谢!您能也展示一下您的 Console 内容吗?就在旁边的标签页。我想这可能会有帮助。

编辑:我想我能重现它了,让我看看,很快给您回复!

控制台选项卡


@Arkshine

@LaptechInfo 谢谢!昨天有一个来自 PR 的 Discourse bug。我创建了一个主题:https://meta.discourse.org/t/cant-upload-image-in-settings/352213。 :+1:

3 个赞