首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >数据万象盲水印操作实践--提取盲水印

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

原创
作者头像
腾讯云技术服务团队
修改2019-05-02 09:51:36
3.4K5
修改2019-05-02 09:51:36
举报

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

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

请求语法

提取盲水印的请求包与 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 = "http://sunweitest-1251956900.picbj.myqcloud.com/blind.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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 请求语法
  • 请求内容
  • 返回内容
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档