数据万象盲水印操作实践--提取盲水印

上一节我们讲述了如何添加盲水印,以及访问时实时生成盲水印图片。

本节我们做一下如何从图片中提取盲水印。可用于水印的提取,识别判断等业务逻辑。

请求语法

提取盲水印的请求包与 COS 简单上传文件接口一致,只需在请求包头部增加图片处理参数 Pic-Operations 并使用提取盲水印参数(watermark/4)即可。相关示例如下:

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

请求内容

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/4/type/<type>/image/<imageUrl>/text/<text>

参数说明

参数

类型

必选

描述

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 源站域名),如:examplebucket-1250000000.image.myqcloud.com 属于 CDN 加速域名,不能在水印 URL 中使用; 3. URL必须以 http:// 开始,不能省略 http 头,也不能填 https 头,如:examplebucket-1250000000.picsh.myqcloud.com/shuiyin_2.png, https://examplebucket-1250000000.picsh.myqcloud.com/shuiyin_2.png 就是非法的水印 URL。

返回内容

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

参数

类型

父节点

描述

WatermarkStatus

Int

Object

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

代码片段:

//构造http请求的对象
myRequest = (HttpWebRequest)WebRequest.Create(url);

//设置
myRequest.ProtocolVersion = HttpVersion.Version10;
myRequest.Method = type;
// 读取图片内容
FileInfo fi = new FileInfo("D:/test/8.jpg");//含盲水印的图片
System.IO.FileStream fs1 = fi.OpenRead();
byte[] buf = new byte[fs1.Length];
fs1.Read(buf, 0, buf.Length);
fs1.Close();
myRequest.ContentType = "image/jpeg";
myRequest.ContentLength = buf.Length;//设置读取图片对象的大小

string watermarkurl = "i47aA.D.e51/https://jkboy.com/wp-content/uploads/2023/01/20230108225903-63bada3768bab.png";
             
//盲水印提取
myRequest.Headers.Add("Pic-Operations", "{\\"is_pic_info\\":1,\\"rules\\":[{\\"fileid\\":\\"example2.jpg\\",\\"rule\\":\\"watermark/4/type/2/image/" + EncodeBase64(watermarkurl) + "\\"}]}");

outstream = myRequest.GetRequestStream();
outstream.Flush();
outstream.Write(buf, 0, buf.Length);
outstream.Flush();
outstream.Close();

// 获得接口返回值
myResponse = (HttpWebResponse)myRequest.GetResponse();
reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8);
string ReturnXml = reader.ReadToEnd();
reader.Close();
myResponse.Close();
myRequest.Abort();

注意fi这里需要是一个含有盲水印的图片,才可以得到提取值,测试一下。

我们用未含有盲水印的原图提取一下。

<UploadResult>
        <OriginalInfo>
                <Key>example.jpg</Key>
                <Location>sunweitest-1251956900.cos.ap-beijing.myqcloud.com/example.jpg</Location>
                <ImageInfo>
                        <Format>JPEG</Format>
                        <Width>960</Width>
                        <Height>1280</Height>
                        <Quality>78</Quality>
                        <Ave>0x5a5a3d</Ave>
                        <Orientation>1</Orientation>
                </ImageInfo>
        </OriginalInfo>
        <ProcessResults>
                <Object>
                        <Key>example2.jpg</Key>
                        <Location>sunweitest-1251956900.cos.ap-beijing.myqcloud.com/example2.jpg</Location>
                        <Format>JPEG</Format>
                        <Width>119</Width>
                        <Height>82</Height>
                        <Size>5891</Size>
                        <Quality>78</Quality>
                        <WatermarkStatus>54</WatermarkStatus>
                </Object>
        </ProcessResults>
</UploadResult>

得到WatermarkStatus为54,判断未含有盲水印,提取失败。提取的结果图片为

提取的盲水印图片

我们用含有盲水印的图片提取

<UploadResult>
        <OriginalInfo>
                <Key>example.jpg</Key>
                <Location>sunweitest-1251956900.cos.ap-beijing.myqcloud.com/example.jpg</Location>
                <ImageInfo>
                        <Format>JPEG</Format>
                        <Width>960</Width>
                        <Height>1280</Height>
                        <Quality>78</Quality>
                        <Ave>0x5a5a3d</Ave>
                        <Orientation>1</Orientation>
                </ImageInfo>
        </OriginalInfo>
        <ProcessResults>
                <Object>
                        <Key>example2.jpg</Key>
                        <Location>sunweitest-1251956900.cos.ap-beijing.myqcloud.com/example2.jpg</Location>
                        <Format>JPEG</Format>
                        <Width>119</Width>
                        <Height>82</Height>
                        <Size>6938</Size>
                        <Quality>78</Quality>
                        <WatermarkStatus>77</WatermarkStatus>
                </Object>
        </ProcessResults>
</UploadResult>

看到WatermarkStatus为77,提取成功。提取的图片为

提取的盲水印图片

和水印图片比较一下。似曾相识......

水印原图

以上就是数据万象-盲水印的操作方法。附件中是本次实践的代码(C#版)欢迎大家亲自实践感受一下,同时也希望继续支持腾讯云-数据万象产品。

WXdemo.zip

本站文章资源均来源自网络,除非特别声明,否则均不代表站方观点,并仅供查阅,不作为任何参考依据!
如有侵权请及时跟我们联系,本站将及时删除!
如遇版权问题,请查看 本站版权声明
THE END
分享
二维码
海报
数据万象盲水印操作实践--提取盲水印
提取盲水印的请求包与 COS 简单上传文件接口一致,只需在请求包头部增加图片处理参数 Pic-Operations 并使用提取盲水印参数(watermark/4...
<<上一篇
下一篇>>