文档

图片盲水印

更新时间:

通过图片盲水印技术,您可以在不影响原图视觉效果的前提下,向图片中嵌入不可见的文字信息。如需获取水印内容,可使用解析盲水印接口获取。即使图片经过一定程度的攻击(裁剪、旋转、缩放、涂鸦、换色等),仍可以正确解析水印内容。

使用场景

  • 鉴权追责:判断己方的图片是否被恶意攻击方盗取。

  • 上传查重:判断用户上传的图片是否来自已存在的资源库。

  • 资源防泄漏:通过流传的资源图片中嵌入的盲水印得到泄漏方的相关信息。

注意事项

  • 图片盲水印只能使用当前存储空间内的图片。网络或本地图片需上传至当前存储空间内方可使用。

  • 使用盲水印功能需要为当前存储空间绑定 IMM Project,请参见快速入门。添加盲水印后的图片需要存储到当前IMM Project对应的存储空间,否则会无法解析。

  • 图片盲水印仅支持JPG、PNG、BMP、WebP、TIFF格式。

  • 仅支持为图片添加文字水印。

  • 添加盲水印为同步操作,解析盲水印为异步操作。

  • 必须拥有IMM处理所需的相关权限。更多信息,请参见权限

  • 图片盲水印不支持纯黑、纯白图片,以及分辨率过低(<200px * 200px,非严格参数)的图片。

添加盲水印

参数说明

操作名称:image/blindwatermark

相关参数如下:

参数

是否必须

描述

取值范围

content

文字水印的Base64编码。

Base64编码之前水印字符串的最大长度限制为256个字符。

s

水印添加强度,强度越高,添加水印后的图像抵抗攻击性能越强,但引起的失真越明显。

  • low(默认值):低强度。

  • medium:中等强度。

  • high:高强度。

q

携带水印信息的输出图片的存储质量。质量越高,图片尺寸越大,水印解析质量越高。

说明

仅输入图片格式为jpg时生效。

默认值为90,取值范围为70~100。

添加图片盲水印时也会用到sys/saveas参数。更多信息,请参见另存为

水印编码

在添加水印操作中,文字水印的文字内容等参数需要进行URL安全的Base64编码。编码步骤如下:

  1. 将内容编码成Base64。

  2. 将结果中的部分编码替换。

    • 将结果中的加号(+)替换成短划线(-)。

    • 将结果中的正斜线(/)替换成下划线(_)。

    • 将结果中尾部的所有等号(=)省略。

推荐通过base64url encoder对文字水印的文字内容的水印图片名称等参数进行编码。

解析盲水印

参数说明

操作名称:image/deblindwatermark

相关参数如下:

参数

是否必须

描述

取值范围

s

水印提取等级,等级增大,耗时越长,提取效果越好。

  • low(默认值):低等级。

  • medium:中等级。

  • high:高等级。

t

嵌入的水印类型。

text:文字。

解析盲水印时也会用到notify参数。更多信息,请参见消息通知

使用REST API

添加盲水印

POST /example.jpg?x-oss-process   HTTP/1.1
Host: image-demo.oss-cn-hangzhou.aliyuncs.com
Date: Fri, 28 Oct 2022 06:40:10 GMT
Authorization: OSS qn6qrrqxo2oawuk53otf****:UNQDb7GapEgJkcde6OhZ9J****

// 水印内容为“阿里云版权所有”,水印强度为low,输出图片质量为90,添加水印后的图片保存为oss://image-demo/outobjprefix.jpg
x-oss-process=image/blindwatermark,content_6Zi_6YeM5LqR54mI5p2D5omA5pyJ,s_low,q_90|sys/saveas,b_aW1hZ2UtZGVtbw,o_b3V0b2JqcHJlZml4LmpwZw

解析盲水印

POST /outobjprefix.jpg?x-oss-async-process HTTP/1.1
Host: image-demo.oss-cn-hangzhou.aliyuncs.com
Date: Fri, 28 Oct 2022 06:40:10 GMT
Authorization: OSS qn6qrrqxo2oawuk53otf****:UNQDb7GapEgJkcde6OhZ9J****

// 解析上一步中添加的水印,消息topic为doc-images。
x-oss-async-process=image/deblindwatermark|sys/notify,topic_ZG9jLWltYWdlcw

任务完成后,从图片中解析出来的水印内容会在异步消息中返回,详见CreateDecodeBlindWatermarkTask接口MNS消息示例

使用SDK

添加盲水印

添加盲水印为同步接口,Python SDK示例如下:

# -*- coding: utf-8 -*-
import base64
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider

# 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())
# 填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
endpoint = 'https://oss-cn-hangzhou.aliyuncs.com'
# 指定原图所在的Bucket名称。
source_bucket_name = 'source_bucket_name'
# 指定用于存放处理后图片的Bucket名称,该Bucket需与原图所在Bucket在同一地域。
taget_bucket_name = 'taget_bucket_name'
# 指定原图名称。如果图片不在Bucket根目录,需携带文件完整访问路径,例如sourceDir/source.jpg。
source_image_name = 'sourceDir/source.jpg'

# 指定Bucket实例,所有文件相关的方法都需要通过Bucket实例来调用。
bucket = oss2.Bucket(auth, endpoint, source_bucket_name)

# 指定水印内容
content = '阿里云版权所有'

# 添加盲水印
style = "image/blindwatermark,content_{0}".format(oss2.compat.to_string(base64.urlsafe_b64encode(oss2.compat.to_bytes(content))))

# 指定处理后图片名称。如果图片不在Bucket根目录,需携带文件完整访问路径,例如targetDir/target.jpg。
target_image_name = 'targetDir/target.jpg'
process = "{0}|sys/saveas,o_{1},b_{2}".format(style,
    oss2.compat.to_string(base64.urlsafe_b64encode(oss2.compat.to_bytes(target_image_name))),
    oss2.compat.to_string(base64.urlsafe_b64encode(oss2.compat.to_bytes(taget_bucket_name))))
result = bucket.process_object(source_image_name, process)
print(result)

其他语言使用方法请参见另存为

解析水印

解析盲水印为异步接口,Python SDK 示例如下:

# -*- coding: utf-8 -*-
import base64
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
# 填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
endpoint = 'https://oss-cn-hangzhou.aliyuncs.com'
# 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())
# 指定Bucket名称。
bucket_name = 'taget_bucket_name'
# 指定水印图文件名称。
source_key = 'targetDir/target.jpg'
# 指定MNS消息的topic。
topic = 'imm-blindwatermark-test'

# 指定Bucket实例,所有文件相关的方法都需要通过Bucket实例来调用。
bucket = oss2.Bucket(auth, endpoint, bucket_name)

# 提取指定图片中的水印内容。
style = 'image/deblindwatermark,s_low,t_text'
process = "{0}|sys/notify,topic_{1}".format(style,
  oss2.compat.to_string(base64.urlsafe_b64encode(oss2.compat.to_bytes(topic))).replace('=', ''))

# 调用异步流媒体处理接口。
result = bucket.async_process_object(source_key, process)
print(result.request_id)

其他语言使用方法请参见异步处理

  • 本页导读 (1)