盲水印功能

最近更新时间:2018-12-24 17:17:37

简介

盲水印功能是腾讯云数据万象提供的全新水印模式。通过该功能,您可将水印图以不可见的形式添加到原图信息中,并不会对原图质量产生太大影响。在图片被盗取后,您可对疑似被盗取的资源进行盲水印提取,验证图片归属。

数据万象提供的盲水印功能拥有半盲、全盲和文字盲水印三种类型:

水印类型 特性 适用场景
半盲水印(type1) 抗攻击性强,但提取水印需原图 小图(640x640以下)使用
全盲水印(type2) 提取方便,提取水印仅需水印图 无需对比原图 批量添加,批量校验
文字水印(type3) 可直接将文字信息添加至图片中 终端信息添加

盲水印是付费服务,使用时需在相应 bucket 配置页中通过开关开通服务。每个账户拥有三千次免费额度,超出后进行计费。具体费用请查阅 购买指南

适用场景

1.鉴权追责

您可对图片资源增加半盲水印,在发现恶意攻击方盗取您的资源后将疑似被盗取图取回,并与相应原图进行盲水印提取操作,若能够得到有效水印图即可证明资源归属。

2.上传查重

未解决部分用户使用其他用户资源重复上传相同信息的问题(如房产图、汽车图、商品图等),您可在用户上传图片资源前先进行全盲水印提取,若提取到水印图信息则证明该图片来自之前已有资源,并进行相应操作(如提醒用户请勿重复上传资源);若不存在全盲水印则添加全盲水印,保护图片资源不被其他用户下载后重复上传。

3.资源防泄露

对于内部分享的图片资源,您可通过文字盲水印将访问方的信息在请求图片时添加至图片中,当资源泄露后可通过流传出的资源图提取出盲水印,进而得到泄露方信息。

添加盲水印

上传时添加

请求语法

图片上传时添加盲水印的请求包与 COS 简单上传文件接口一致,只需在请求包头部增加图片处理参数 Pic-Operations 并使用盲水印参数即可。以 COS 上传时添加盲水印为例:

PUT /<ObjectName> HTTP/1.1
Host: <BucketName-APPID>.pic.<Region>.myqcloud.com
Date: GMT Date
Authorization: Auth String
Pic-Operations: <PicOperations>

注意:

  • COS 简单上传文件接口详情,请查阅 COS 文档
  • Authorization: Auth String (详细参见 请求签名 章节)。

请求内容

Pic-Operations 为 json 格式的字符串,具体参数如下:

参数名称 类型 必选 描述
is_pic_info Int 是否返回原图信息。0表示不返回原图信息,1表示返回原图信息,默认为0
rules Array 处理规则,一条规则对应一个处理结果(目前最多支持五条规则),不填则不进行图片处理

rules(json 数组)中每一项具体参数如下

参数名称 类型 必选 描述
bucket String 存储结果的目标 bucket 名称,形如 bucketName-appid,如果不指定的话默认保存到当前 bucket
fileid String 处理结果的文件路径名称,如以’/’开头,则存入指定文件夹中,否则,存入原图文件存储的同目录
rule String 处理参数,参见数据万象图片处理 API。 若按指定样式处理,则以”style/”开头,后加样式名,如样式名为”test”,则 rule 字段为”style/test”

使用盲水印需在 rule 中添加水印图参数(watermark),相关内容如下:

watermark/3/type/<type>/image/<imageUrl>/text/<text>

参数说明

参数 类型 必选 描述
type Int 盲水印类型,有效值:1 半盲;2 全盲;3 文字
image String 盲水印图片地址,需要经过 URL 安全的 Base64 编码。 当 type 为1或2时必填,type 为3时无效。 指定的水印图片必须同时满足如下 3 个条件:
1. 盲水印图片与原图片必须位于同一个对象存储桶下;
2. URL 需使用数据万象源站域名(不能使用 CDN 加速、COS 源站域名),如:v2test-10000812.image.myqcloud.com 属于 CDN 加速域名,不能在水印 URL 中使用;
3. URL 必须以 http:// 开始,不能省略 http 头,也不能填 https 头,如:tengxunyun-10004486.picsh.myqcloud.com/shuiyin_2.png,https://tengxunyun-10004486.picsh.myqcloud.com/shuiyin_2.png 就是非法的水印 URL。
text String 盲水印文字,需要经过 URL 安全的 Base64 编码。当 type 为3时必填,type 为1或2时无效。

返回内容

响应包体具体数据内容如下:

参数名称 类型 描述
UploadResult Container 原图信息

UploadResult 节点内容:

参数名称 类型 描述
OriginalInfo Container 原图信息
ProcessResults Container 图片处理结果

OriginalInfo 节点内容:

节点名称 类型 描述
Key String 原图文件名
Location String 图片路径
ImageInfo Container 原图图片信息

ImageInfo 节点内容:

节点名称 类型 描述
Format String 格式
Width Int 图片宽度
Height Int 图片高度
Quality Int 图片质量
Ave String 图片主色调
Orientation Int 图片旋转角度

ProcessResults 节点内容:

节点名称 类型 描述
Object Container 每一个图片处理结果

Object 节点内容:

节点名称 类型 描述
Key String 文件名
Location String 图片路径
Format String 图片格式
Width Int 图片宽度
Height Int 图片高度
Size Int 图片大小
Quality Int 图片质量

说明:

腾讯云 COS 会默认为每个资源生成经 CDN 的访问链接 access_url,当业务端尚未开通 CDN 时,仍然可以获得该链接,但是无法访问。

示例
请求

PUT /filename.jpg HTTP/1.1
Host: xxxx-123456.pic.ap-chengdu.myqcloud.com
Date: Tue, 03 Apr 2018 09:06:15 GMT
Authorization:XXXXXXXXXXXX
Pic-Operations:
{"is_pic_info":1,"rules":[{"fileid":"test.jpg","rule":"watermark/3/type/1/image/aHR0cDovL2V
4YW1wbGVzLTEyNTEwMDAwMDQucGljc2gubXlxY2xvdWQuY29tL3NodWl5aW4uanBn
"}]}
Content-Length: 64
[Object]

响应包体

HTTP/1.1 200 OK
Content-Type: application/xml
Content-Length: 645
Date: Tue, 03 Apr 2018 09:06:16 GMT
Status: 200 OK
x-cos-request-id: NWFjMzQ0MDZfOTBmYTUwXzZkZV8zMQ==
<UploadResult>
<OriginalInfo>
<Key> filename.jpg</Key>
<Location>xxxx-123456.cos.ap-chengdu.myqcloud.com/ filename.jpg</Location>
<ImageInfo>
<Format>JPEG</Format>
<Width>640</Width>
<Height>427</Height>
<Quality>100</Quality>
<Ave>0xa18454</Ave>
<Orientation>1</Orientation>
</ImageInfo>
</OriginalInfo>
<ProcessResults>
<Object>
<Key>test.jpg</Key>
<Location> xxxx-123456.cos.ap-chengdu.myqcloud.com/test.jpg</Location>
<Format>png</Format>
<Width>640</Width>
<Height>427</Height>
<Size>463092</Size>
<Quality>100</Quality>
</Object>
</ProcessResults>
</UploadResult>

注意:

  • 请求包包体的 filecontent 字段为原图的图片内容,包头 Pic-Operations 的 rule 字段中,imageUrl 为水印图片地址。
  • 返回包 process_results 字段的 url 为携带盲水印的图片地址。

下载时添加

图片下载时添加盲水印与添加普通水印操作相同,只需在图片访问链接后使用 watermark 参数即可。相关内容如下:

watermark/3/type/<type>/image/<imageUrl>/text/<text>

参数说明

参数 类型 必选 描述
type Int 盲水印类型,有效值:1 半盲;2 全盲;3 文字
image String 盲水印图片地址,需要经过 URL 安全的 Base64 编码。 当 type 为1或2时必填,type 为3时无效。 指定的水印图片必须同时满足如下 3 个条件:
1. 盲水印图片与原图片必须位于同一个对象存储桶下;
2. URL 需使用数据万象源站域名(不能使用 CDN 加速、COS 源站域名),如:v2test-10000812.image.myqcloud.com 属于 CDN 加速域名,不能在水印 URL 中使用;
3. URL 必须以 http:// 开始,不能省略 http 头,也不能填 https 头,如:tengxunyun-10004486.picsh.myqcloud.com/shuiyin_2.png, https://tengxunyun-10004486.picsh.myqcloud.com/shuiyin_2.png 就是非法的水印 URL。
text String 盲水印文字,需要经过 URL 安全的 Base64 编码。 当 type 为3时必填,type 为1或2时无效。

示例

http://examples-1251000004.picsh.myqcloud.com/sample.jpeg?watermark/3/type/3/text/ dGVuY2VudCBjbG91ZA==

提取盲水印

请求语法

盲水印提取的请求包与添加盲水印的请求包一致,只需将请求包头部-图片处理参数 Pic-Operations 中的图片处理参数做修改即可。具体示例如下:

提取盲水印操作的图片处理参数如下:

参数说明

参数 类型 必选 描述
type Int 盲水印类型,有效值:1 半盲;2 全盲;3 文字,必须跟添加盲水印时的 type 类型一致
image String 图片地址,当type为1或2时必填,type为3时无效。 type 为1时,为原图图片地址;type 为2时,为水印图地址; 需要经过 URL 安全的 Base64 编码。指定的图片必须同时满足如下 3 个条件:
1. 图片与存在水印的图片必须位于同一个对象存储桶下;
2. URL 需使用数据万象源站域名(不能使用 CDN 加速、COS 源站域名),如:v2test-10000812.image.myqcloud.com 属于 CDN 加速域名,不能在水印 URL 中使用;
3. URL必须以 http:// 开始,不能省略 http 头,也不能填 https 头,如:tengxunyun-10004486.picsh.myqcloud.com/shuiyin_2.png, https://tengxunyun-10004486.picsh.myqcloud.com/shuiyin_2.png 就是非法的水印 URL。

返回内容

返回内容中的 UploadResult——ProcessResults——Object 字段中新增 WatermarkStatus 字段,当盲水印提取的请求包中 type 参数为2时携带该参数,其他情况不返回该参数。

参数 类型 父节点 描述
WatermarkStatus Int Object 当 type 为2时返回该字段,表示提取到全盲水印的可信度。具体为0-100的数字,75分以上表示确定有盲水印,60-75表示疑似有盲水印,60以下可认为未提取到盲水印

示例
请求

PUT /test1.jpg HTTP/1.1
Host: xxxx-123456.pic.ap-chengdu.myqcloud.com
Date: Tue, 03 Apr 2018 09:06:15 GMT
Authorization:XXXXXXXXXXXX
Pic-Operations:
{"is_pic_info":1,"rules":[{"fileid":"test2.jpg","rule":"watermark/4/type/1/image/
aHR0cDovL2V4YW1wbGVzLTEyNTEwMDAwMDQucGljc2gubXlxY2xvdWQuY29tL2ZpbGV
uYW1lLmpwZWc="}]}
Content-Length: 64
[Object]

响应包体

HTTP/1.1 200 OK
Content-Type: application/xml
Content-Length: 645
Date: Tue, 03 Apr 2018 09:06:16 GMT
Status: 200 OK
x-cos-request-id: NWFjMzQ0MDZfOTBmYTUwXzZkZV8zMQ==
<UploadResult>
<OriginalInfo>
<Key> test1.jpg</Key>
<Location>xxxx-123456.cos.ap-chengdu.myqcloud.com/ test1.jpg</Location>
<ImageInfo>
<Format>JPEG</Format>
<Width>640</Width>
<Height>427</Height>
<Quality>100</Quality>
<Ave>0xa18454</Ave>
<Orientation>1</Orientation>
</ImageInfo>
</OriginalInfo>
<ProcessResults>
<Object>
<Key>test2.jpg</Key>
<Location> xxxx-123456.cos.ap-chengdu.myqcloud.com/test2.jpg</Location>
<Format>png</Format>
<Width>640</Width>
<Height>427</Height>
<Size>463092</Size>
<Quality>100</Quality>
</Object>
</ProcessResults>
</UploadResult>

注意:

  • 对于 type 值为1的请求,包头 Pic-Operations 的 rule 字段中,imageUrl 为未带盲水印的原图图片地址;对于 type 值为2的请求,包头 Pic-Operations 的 rule 字段中,imageUrl 为水印图片的地址。
  • 返回包 ProcessResults 字段的 url 为提取出来的水印图片地址。

如果有其他疑问,您也可以在问答社区中寻求帮助。前往问答社区 >