ToolAct工具行动

图片加水印

为图片添加文字或图片水印,支持调整位置、透明度、大小

上传图片

拖拽图片到此处,或点击选择文件

支持 JPG、PNG、WebP、BMP 格式,可一次选择多张

什么是图片加水印?

图片水印是在照片或设计图上叠加文字、Logo 或另一张图片,用来标明版权、来源、品牌、使用状态或发布场景。它常用于商品图、作品集、活动照片、培训资料、社交媒体内容和交付前预览。水印的关键不是越大越好,而是在可识别和不破坏画面之间取得平衡:既要降低随手盗用的可能,又不能挡住主体、纹理、文字或重要细节。位置、透明度、尺寸、平铺方式和旋转角度都应根据图片类型调整。本工具在浏览器本地处理,适合快速标注和轻量保护。

使用方法

使用方法

  1. 拖拽或点击上传图片(支持多选)
  2. 选择水印类型:文字水印或图片水印
  3. 设置水印内容、位置、透明度、大小和旋转角度
  4. 点击「添加水印」按钮,预览并下载

水印预览提示

  • 请在不同尺寸图片上预览水印效果;大图上清晰的水印,在缩略图上可能过重或无法辨认。
  • 建议保留一份无水印的原图,以便后续调整水印位置、透明度或文字内容。

使用场景

为多张文件添加文字或图片水印上传图片,选择文字或上传的水印图片,然后控制字体大小、颜色、透明度、缩放、旋转、位置和平铺方式后再生成输出。本工具仅应用可见的叠加层作为保护,能阻止随意盗用但无法防止从干净源图中通过 LSB 隐写术提取信息。
批量导出前预览水印效果预览和导出使用相同的 Canvas 绘制逻辑,因此平铺间距、单点放置、旋转和透明度都可以在处理所有图片前进行检查。自定义字体可能会回退到系统字体栈,因此源图中选择的字体在导出时可能以不同的度量渲染。当源图带有 EXIF 方向标签时,浏览器会在绘制时遵循它,但导出的 PNG 或 JPG 会去掉该标签,因此以横屏模式拍摄的竖版照片需要在水印放置到目标角落前手动旋转。
以实用格式导出带水印的图片选择 PNG、JPG 或 WebP 格式(JPG/WebP 支持质量控制),然后在 Canvas 渲染完成后下载单张完成的文件或所有完成的结果。导出前请检查 Alpha 计算,因为 Canvas 的 globalAlpha 值会乘以现有像素的 Alpha,所以 50% 透明的水印叠加在 50% 透明的 PNG 上会渲染为 25%。measureText 的宽度单位为 CSS 像素,因此在 2x 显示器上适配预览的水印在 1x 移动端导出时可能会溢出图片边缘。
对草稿预览使用斜向平铺水印启用带旋转的平铺功能来标记草稿或未发布的产品图,使审核人员不会意外发布工作文件。将透明度降低到约 25-40%,这样主体内容在重复的文字或 Logo 下方仍然可见。
将 Logo 放置与版权行结合在某个角落叠加小型图片 Logo,同时在底部边缘添加「(c) Studio Name 2026」等文字行以加强归属信息。每次更改后请重新渲染 Canvas,因为字体缩放、图片缩放和透明度都会影响两个标记的重叠效果。

技术原理

水印处理完全在 2D Canvas 上完成。源图片通过 ctx.drawImage 以原始像素尺寸绘制到 HTMLCanvasElement 上,然后使用 ctx.fillText 叠加文字或使用第二次 drawImage 调用叠加图片 Logo。透明度由 ctx.globalAlpha 控制,它会乘以后续每个像素的 Alpha 通道;globalAlpha 设为 0.5 时叠加在 50% 透明的 PNG 上,最终像素只有 25%,这是「为什么水印看不见」最常见的原因。 定位使用标准 Canvas 变换:ctx.translate 将原点移动到放置锚点(左上、右上、居中、右下,或 3×3 网格的每个单元格),ctx.rotate(angle) 围绕该原点旋转对角印章,然后绘制调用在不添加额外偏移的情况下放置水印。平铺水印使用 createPattern 传入旋转后的源图,再通过 ctx.fillRect 在整个 Canvas 上绘制,这就是为什么全页 DRAFT 条纹无论源图尺寸如何都能保持均匀间距。字体度量来自 ctx.measureText,它返回 CSS 像素单位,因此一个在 2x 显示器上适配预览的 28px 标签在 1x 移动端导出时可能会被裁切。 导出步骤使用 canvas.toBlob 配合 'image/png'、'image/jpeg' 或 'image/webp' 格式,有损格式可选质量参数。Canvas 以源图分辨率运行,因此输出保留原始像素尺寸,但不携带源图 EXIF 方向信息、ICC 配置文件或其他元数据。超过 30 张大图的批量处理会阻塞 UI 线程,因为 toBlob 虽然是异步的,但绘制堆栈在主线程上同步运行,因此大批量任务适合将 Canvas 工作移入 Web Worker 配合 OffscreenCanvas 处理。

  • 合成堆栈:ctx.drawImage 绘制底图,ctx.fillText(或第二次 drawImage)绘制水印,ctx.globalAlpha 控制透明度乘法。
  • Alpha 计算:globalAlpha 与每个像素的现有 Alpha 值相乘,因此 0.5 的水印叠加在 0.5 Alpha 的 PNG 上渲染为 0.25,而非 0.5。
  • 旋转:先用 ctx.translate 移动到锚点,再用 ctx.rotate(angle) 按弧度旋转,然后在原点 (0,0) 绘制,使变换保持以放置点为中心。
  • 平铺:createPattern 返回 CanvasPattern,fillRect 可在整个 Canvas 上绘制,无论源图尺寸如何都能保持间距均匀。
  • 文字度量:measureText 返回 CSS 像素单位,因此在 2x 预览上合适的标签在 1x 移动端导出时可能溢出图片边缘;不确定时按 canvas.width 等比缩放。
  • 导出:toBlob('image/png' | 'image/jpeg' | 'image/webp', quality) 保留源图分辨率但会去除 EXIF 和 ICC 信息;如果方向正确性很重要,需在绘制前根据 EXIF 方向旋转。

示例

右下角版权文字

类型:文字水印
文本:"(c) 2026 ToolAct Studio"
字体:28 px,白色(#FFFFFF)
位置:右下角
不透明度:50%
用途:作品集照片、博客主视觉图

全图斜向平铺草稿水印

类型:文字水印,平铺
文本:"DRAFT - DO NOT SHARE"
字体:48 px,浅灰色(#CCCCCC)
旋转:-30 度
不透明度:25%
平铺间距:200 px
用途:未发布商品图的客户审稿

PNG logo 放在左上角,缩放 15%

类型:图片水印
水印文件:brand-logo.png(透明背景)
位置:左上角,内边距 20 px
缩放:原图宽度的 15%
不透明度:80%
效果:在 1920 px 主视觉图上 logo 显示宽度为 288 px

批量处理 30 张商品图

输入:30 张 JPG 商品图,每张 2000 x 2000 px
水印:文字 "shop.toolact.com"
位置:底部居中,边距 40 px
不透明度:60%,输出格式:JPG,质量 92
处理耗时:约 8 秒,总输出:24 MB

常见问题

图片会被上传去加水印吗?

不会。水印通过 canvas 在你的浏览器中合成到图片上,原始数据和加水印后的输出都不会离开你的设备。

支持哪些水印样式?

支持文字水印(自定义字符串、字号、颜色、不透明度、旋转角度,以及平铺/重复以铺满全图)和图片水印(在指定位置以指定不透明度叠加你自己的 logo)。大多数版本可以同时使用两种。

水印应该放哪里?

放在角落(通常右下角)干扰最小,但容易被裁掉。整图平铺的水印更难干净去除,但会影响画面美观。半透明居中水印则在两者之间取得平衡。请根据优先考虑可读性还是版权保护来选择。

水印能被去除吗?

对于背景规整的照片,下定决心的攻击者通常可以通过裁剪或内容感知填充去除单角水印。平铺、半透明的水印更难处理。没有哪种水印是无法去除的——把它当成威慑和版权标记,而不是真正的保护。

输出格式和画质?

PNG 能锐利地保留水印边缘(推荐用于线稿和截图)。JPEG 会重新编码,可能让水印略微变软;选 90 以上的画质可获得清晰输出。页面允许你选择格式和画质。

EXIF 和元数据会保留吗?

多半不会——基于 canvas 的处理通常会丢弃 EXIF 和 ICC 配置文件。这可能对隐私有利(相机元数据、GPS 位置和时间戳被去除),但意味着加水印后的副本不再是取证原件。

可以批量给多张图片加水印吗?

可以。拖入多个文件,会对每张应用相同的水印。批量大小受浏览器内存限制——非常大的批量会拖慢处理速度,移动端可能内存不足。建议每批 20-50 张以保持稳定。