继上次写了个WordPress下实现了“数字水印”,因为WordPress里面用到的是PHP语言,那就暂且叫实现了PHP版的“数字水印”吧(这样的显的高大上吧,哈哈)。
其实,实际上在实践中,我是先开发了JavaScript的“数字水印”,随后才完成了PHP版“数字水印”,但是发文章的时候,因为具体落实到网站的实现方案是采用了PHP写的,所以就先写了PHP的“数字水印”文章了。
毕竟这块放在前端做的话,其实挺不合理的,尤其对于大文件,读取,随后还要进行切割,重新组装成新的数据流发送给后端,这样的对于浏览器,用户体验的“代价”是挺大的,所以最终也决定有后端来做,具体大家看下前和后端的代码就知道区别了。
下面就给大家献丑了,我写的JavaScript版的“数字水印”也叫隐写术(配合计算字节长度文章,食用更佳,链接下方有),代码如下;
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>伪数字水印(隐写术)</title> </head> <body> <input type="file" onchange="fileOnChange(this)" /> <script> function fileOnChange(ele) { let file = ele.files[0]; let fileReader = new FileReader(); fileReader.readAsArrayBuffer(file); fileReader.onload = function (e) { //请注意,这个TextEncoder是有兼容性问题的 let encode = new TextEncoder(); let addInfo = "yerenwz.com"; //隐藏的信息 let blob = new Blob( [e.target.result, encode.encode(addInfo).buffer], { type: "image/jpeg", } ); const a = document.createElement("a"); a.href = URL.createObjectURL(blob); a.download = "新图片.jpg"; // 这里填保存成的文件名 a.click(); URL.revokeObjectURL(a.href);//及时释放资源 }; } </script> </body> </html>
相关文章推荐;