好久没有更新blog,一是因为最近工作有点忙,二也是研究wordpress的上传功能花了点时间。下面简单说下上传图片时实现自动添加水印的流程。
1. 对象存储
原版的wordpress上传图片会保存在服务器本地,用户访问图片时也是直接访问我们的wordpress服务器,无论从服务分离还是性能要求的角度上来看这都是不太友好的。现代服务大多数都会使用单独的图片文件服务来管理上传的内容,比较流行就是对象存储(IaaS层服务),几乎所有云厂商都会提供这个(亚马逊的S3、阿里的OSS、腾讯的COS、华为的OBS等等),使用对象存储我们可以轻松的实现图片上云,并且配合cdn、图片瘦身等功能做到省流加速访问。
2.图片水印处理
图片上云后又衍生出了大量的处理需求,比如图片尺寸适配,图片大小压缩等等,我们这里单说一说图片水印功能。为了防止盗图,图片水印功能可以说是非常的流行,一般云厂商也都针对性的提供了2种处理方式:
1.同步下载时处理,即通过带访问参数的方式给图片添加水印
2.持久化处理,通常是异步触发,新生成一张带水印的图片保存在云平台上
这里我选择第二种方式实现水印处理(可以节约处理次数),具体流程如下
- 首先通过wordpress上传图片到云平台
- 使用sdk异步触发生成新水印图
- 轮询水印图生成成功后,删除原图
具体实现的代码
这里我以七牛云为例子,fork github上七牛kodo的workpress插件,在上面调整了一下
主要改动有一下几点
- 上传媒体文件时,增加了一个选项,是否自动添加水印
- kodo配置里增加了水印配置
- 新增了异步任务代码来生成水印
代码地址如下:
https://github.com/mysens/qiniu-kodo-wordpress
水印样式可以在云服务上进行调整,后续也打算通过插件的方式支持,留做一个遗留吧