Serverless实践系列(八):如何优雅地给网站图片加水印

前言

很多论坛、博客在进行图片上传之后,都会给自己的图像加上水印,这样可以证明这张图片「属于我」或者是「来自我的博客/网站」。
传统的加水印的方法,通常是在流程内进行,即:
640?wx_fmt=png
这种做法虽然可行,但是无疑会增加单次请求,服务端的压力,如果是高并发的情况下,或者多人上传多张大图的时候,那么可能就会造成自身服务器资源效果过大。
如果在加水印过程中失败,就有可能导致图像存储失败,致使数据丢失,并不理智。 所以后来有人做了如下改进:
640?wx_fmt=png
这样做法的好处就是 —— 我们可以快速将图片存储,存储之后通过一个单独处理的线程,对任务列表进行处理,这样一方面是可以保证我们马上把用户上传的图片存储,并且可以显示,同时也可以在后台进行水印处理,待处理之后,再将图片覆盖或者单独存储,用户如果需要读取图片时,可以自动变为已经水印后的图片。
这种做法相对于前者来说可能稍微复杂一些,但是实际上却是在数据上更加稳定,服务端压力更小,更加可控的一种操作。 但是,这整个流程还是要在自己的服务器上做完,现在已经有很多人将图片等资源存储到腾讯云的对象存储(COS)中,那么可不可以通过某些 COS 触发器与云函数 SCF 结合,实现一个不在自己服务器加水印的流程呢?
本文将以腾讯云函数 SCF 的函数模板(Python 语言)为例,进行一个简单的分享。

实验

新建函数

在无服务器云函数中,选择模板函数:

640?wx_fmt=png

通过搜索「图像」关键词,选中图像压缩,并且确定建立。 保存之后,点击函数代码,进行代码编写。
640?wx_fmt=png

COS 触发器

有些人可能对 COS 触发器还不是很了解,此时可以点击配置,来熟悉 COS 触发器样式:
640?wx_fmt=png
可以看到如下:
 
 
{
"Records" :[
{
"event" : {
"eventVersion" : "1.0" ,
"eventSource" : "qcs::cos" ,
"eventName" : "cos: ObjectCreated: *" ,
"eventTime" : 1501054710 ,
"eventQueue" : "qcs:0:cos:gz:1251111111:cos" ,
"requestParameters" :{
"requestSourceIP" : "111.111.111.111" ,
"requestHeaders" :{
"Authorization" : "上传的鉴权信息"
}
}
},
"cos" :{
"cosSchemaVersion" : "1.0" ,
"cosNotificationId" : "设置的或返回的 ID" ,
"cosBucket" :{
"name" : "bucketname" ,
"appid" : "appId" ,
"region" : "gz"
},
"cosObject" :{
"key" : "/appid/bucketname/DSC_0002.JPG" ,
"size" : 2598526 ,
"meta" :{
"Content-Type" : "text/plain" ,
"x-cos-meta-test" : "自定义的 meta" ,
"x-image-test" : "自定义的 meta"
},
"url" : "访问文件的源站url"
}
}
}
]
}
这里面可以看到整个一个数据结构,需要注意 Records 是一个数组格式,其次就是:
"cosBucket":{"name":"bucketname","appid":"appId","region":"gz"}
这里面是由该 bucket 触发
"cosObject":{"key":"/appid/bucketname/DSC_0002.JPG","size":2598526,"meta":{"Content-Type":"text/plain","x-cos-meta-test":"自定义的 meta","x-image-test":"自定义的 meta"},"url":"访问文件的源站 url"}
这里面的 key 是在上述 bucket 中新建的文件名字。
所以,我们可以按照我们的实际情况,将上面的内容简单修改一下,成为我们格式,以便测试(在生产中,这个是自动生成的触发格式,并不需要我们修改,我们修改只是为了测试)
 
 
{
"Records" :[
{
"event" : {
"eventVersion" : "1.0" ,
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值