摘要
页面水印目前主要有以下2种做法:
- 服务器生成水印图片置于页面顶/底层
- 前端生成水印图片(canvas,svg)置于页面顶/底层
对于需要考虑兼容,如IE10以下版本的浏览器,推荐使用服务器生成水印并放于页面底层的方式
对于安全性较高场景,需要防范水印被删除或者篡改。
对于图片水印来说,除了显式水印,还可以通过隐式水印来对图片进行鉴权。
1 | <style> |
水印组件封装
1 | <!DOCTYPE html> |
图片隐写术
对于图片资源来说,显性水印会破坏图片的完整性,有些情况下我们想要在保留图片原本样式,这时可以添加隐藏水印。
简单实现思路是:图片的像素信息里存储着 RGB 的色值,对于RGB 分量值的小量变动,是肉眼无法分辨的,不会影响对图片的识别,我们可以对图片的RGB以一种特殊规则进行小量的改动。(LSB最低有效位)
通过canvas.getImageData()可以获取到图片的像素数据,首先在canvas中绘制出水印图,获取到其像素数据,然后通过canvas获取到原图片的像素数据,选定R、G、B其中一个如G,遍历原图片像素,将对应水印像素有信息的像素的G都转成奇数,对应水印像素没有信息的像素都转成偶数,处理完后转成base64并替换到页面上,这时隐形水印就加好了,正常情况下看这个图片是没有水印的,但是经过对应规则(上边例子对应的解密规则是:遍历图片的像素数据中对应的G,奇数则将其rgba设置为0,255,0,偶数则设置为0,0,0)的解密处理后就可以看到水印了。
这种方式下,当用户采用截图、保存图片后转换格式等方法获得图片后,图片的色值可能是会变化的,会影响水印效果 加水印代码实现:
1 |
|
显示水印代码实现:
1 |
|
文件隐藏:
copy /b A.jpg + B.zip C.jpg
本文链接: http://www.ionluo.cn/blog/posts/1a3424e8.html
版权声明: 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。转载请注明出处!