一款快速、单一二进制的水印工具,支持图像和PDF。使用Rust构建。
每年,数百万人因简单的文档交换而遭受身份欺诈。常见场景:你在找房出租。房东——或者冒充房东的人——要求提供你的身份证副本、工资单、税单。你发过去了,没有加标记。然后“房东”消失了,你的文档现在被用来开设银行账户、贷款或冒用你的身份。
对你发送的每一份文档进行水印处理是最有效的防御措施。一个可见的叠加层,上面写着**“已发送至XYZ机构——2026年3月——仅限租房申请”**,使得该文档在任何其他场景下都毫无用处。如果泄露,你能准确知道它来自哪里。
firemark让这一切变得毫不费力:一条命令,任意图像或PDF,17种视觉样式,抗编辑的加密纹饰图案,以及整个文件夹的批量处理。
前后对比——一条命令,文档现在可追溯且防篡改。
预构建的二进制文件(Linux 和 macOS,x86_64 和 arm64)——将最新版本下载到 ~/.local/bin:
curl -fsSL https://raw.githubusercontent.com/Vitruves/firemark/main/install.sh | sh
从 crates.io 安装:
cargo install firemark
从源码安装:
git clone https://github.com/Vitruves/firemark.git
cd firemark
cargo install --path .
生成一个单一优化的二进制文件(约5 MB)。
# 给单张图像添加水印
firemark photo_id.png -m "租房申请 — SCI Dupont — 2026年3月"
# 给PDF添加水印
firemark tax_notice.pdf -m "机密" -s "请勿分发"
# 递归处理整个文件夹
firemark ./documents/ -R -m "已发送至 Agency X" -t stamp
# 预览但不写入文件
firemark id_card.jpg -m "草稿" -n
默认情况下,输出保存在输入文件旁,命名为 {name}-watermarked.{ext}。使用 -o 设置显式输出路径,或使用 -S 设置自定义后缀。
firemark doc.pdf -t stamp -m "机密" --border --color red
firemark 叠加了源自钞票安全特征的加密纹饰图案。这些精细的几何图案极难通过图像编辑器去除。
firemark id.png -m "租房申请" --filigrane moire
firemark id.png -m "租房申请" --filigrane none # 禁用
默认情况下,每次渲染都是非确定性的。firemark 应用通用渲染后扰动(Alpha抖动、亚像素色彩噪声、边缘微点、稀疏鬼影像素)以及按渲染器随机化,使得即使使用相同设置,也没有两个输出是像素级相同的。这使得AI视觉模型无法学习可预测的图案来减去水印。
在此基础上,默认嵌入对抗性提示注入条,以混淆AI水印去除工具。如果你不想要这些可见的提示文字,可以使用 --no-anti-ai 禁用:
firemark doc.png -m "机密" --no-anti-ai
-m, --main-text 主水印文字
-s, --secondary-text 次要文字行
-t, --type 水印样式(见上表)
-o, --output 输出文件路径
-S, --suffix 自定义输出后缀(默认:"watermarked")
-c, --color 颜色——名称或 #RRGGBB(默认:蓝色)
-O, --opacity 不透明度 0.0–1.0(默认:0.5)
-r, --rotation 旋转角度(单位:度,默认:-45)
-p, --position 位置:center, top-left, top-right, bottom-left, bottom-right, tile
-f, --font 字体名称或 .ttf/.otf 文件路径
-I, --image 叠加图像作为水印
--qr-data 嵌入包含自定义数据的二维码
--qr-code-position 二维码位置(默认:居中)
--qr-code-size 二维码大小(像素,默认:自动)
--border 在水印周围绘制边框
--shadow 添加投影
--filigrane 安全纹饰样式(默认:guilloche)
--no-anti-ai 禁用对抗性提示注入(默认启用)
完整列表见 CLI.md(70+ 个标志)。
--pages 要添加水印的页面(例如 1,3-5 或 "all")
--skip-pages 要跳过的页面
--behind 将水印放置在内容后方
--no-flatten 保持图层分离(默认压平)
--dpi 渲染分辨率(默认:150)
# 处理文件夹中的所有图像和PDF
firemark ./inbox/ -m "内部" -t tile
# 递归处理,8个线程,自定义后缀
firemark ./docs/ -R -j 8 -m "草稿" -S draft
# 试运行——列出将要处理的文件
firemark ./docs/ -R -m "草稿" -n
已添加水印的文件(匹配后缀)在重新运行时自动跳过。
将选项保存在 TOML 文件中,避免重复输入标志。请参阅 examples/config/firemark.toml 获取完整示例,其中包含两个预设:ultra-secure(密集平铺、完整纹饰、二维码可追溯性、元数据剥离)和 light(简单对角线文字,无额外功能)。
# 全局默认值
main_text = "机密"
secondary_text = "{author} — {date}"
watermark_type = "diagonal"
color = "#1a3c6e"
opacity = 0.45
font_weight = "bold"
filigrane = "guilloche"
border = true
[preset.ultra-secure]
main_text = "机密 — {author}"
watermark_type = "tile"
color = "#CC0000"
opacity = 0.6
filigrane = "full"
anti_ai = true
qr_data = "firemark://{author}/{timestamp}/{uuid}"
strip_metadata = true
[preset.light]
main_text = "副本"
watermark_type = "diagonal"
color = "#555555"
opacity = 0.3
filigrane = "none"
anti_ai = false
firemark doc.pdf --config firemark.toml
firemark doc.pdf --config firemark.toml --preset ultra-secure
firemark doc.pdf --config firemark.toml --preset light
firemark doc.pdf --save-preset mypreset # 保存当前标志
firemark --list-presets # 列出可用预设
支持跨格式转换(例如 firemark photo.webp -o out.pdf)。
MIT
| 标志 | 样式 | 描述 |
|---|
diagonal | 对角线网格 | 全页重复对角线文字(默认) |
stamp | 橡皮图章 | 大型居中图章,带双边框 |
stencil | 模板 | 全宽军用模板字体 |
typewriter | 打字机 | 等宽打字机文字 |
handwritten | 签名 | 手写风格签名,带下划线 |
redacted | 涂黑 | 全宽黑色涂黑条 |
badge | 盾牌 | 安全盾牌/徽章图案 |
ribbon | 丝带 | 对角线角落丝带横幅 |
seal | 印章 | 圆形公证风格印章 |
frame | 边框 | 全页装饰性边框 |
tile | 平铺 | 密集均匀的文字网格 |
mosaic | 马赛克 | 随机散布的文字 |
weave | 编织 | 交错的斜向编织 |
ghost | 鬼影 | 超细微浮雕文字 |
watercolor | 水彩 | 柔和的模糊水洗效果 |
noise | 噪声 | 带像素噪点的做旧文字 |
halftone | 半色调 | 作为半色调网点网格的文字 |
| 样式 | 描述 |
|---|
guilloche | 正弦波包络带(默认) |
rosette | 螺旋线 + 角落玫瑰曲线 |
crosshatch | 精细斜向菱形网格 |
border | 波浪嵌套安全边框 |
lissajous | 参数化利萨如图形 |
moire | 同心圆干涉图案 |
spiral | 阿基米德螺旋涡旋 |
mesh | 六边形蜂窝网格 |
plume | 散布在表面的流动羽毛状曲线 |
constellation | 由精细几何网络连接的星形节点 |
ripple | 随机原点重叠的椭圆波前 |
full | 所有图案组合 |
none | 禁用纹饰 |
| 格式 | 输入 | 输出 |
|---|
| PNG | 是 | 是 |
| JPEG | 是 | 是 |
| 是 | 是 | |
| WebP | 是 | 是 |
| TIFF | 是 | 是 |