插件一键去水印,岂不妙哉!
背景
前端做一些个人项目,没有 UI 实在太难搞了,PS 又需要学习成本,就想着用一些设计网站做一些图,做好之后发现要 Vip,想着个人项目不商用,截个图,做一下效果,做着做着就想是不是做一个插件自动去一下水印岂不是更好。
说干就干
- 粗略的学习了一下谷歌插件
- 分析一下某站的水印位置(明水印,听大佬说有暗水印,暂不考虑)
- 发现水印处于 image-watermark 该类名的背景图片位置
- 还有一些可能是一个单独的元素。
- 接下来就是找到该元素删除即可(手动删除也可以,以前就是这样干的)
谷歌插件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| const downloadPng = () => { if(!shareContent) return let rect = shareContent.getBoundingClientRect() let opts = { x: rect.left, y: rect.top, scale: window.devicePixelRatio*2, useCORS: true , } html2canvas(shareContent, opts).then(canvas => { let img = new Image(); img.src = canvas.toDataURL(); var a = document.createElement('a'); a.download = '无水印图' a.href = img.src; document.body.appendChild(a); a.click(); document.body.removeChild(a);
|
1 2 3 4 5 6 7
| function sendMessageToContentScript(message, callback) { chrome.tabs.query({ active: true, currentWindow: true }, function (tabs) { chrome.tabs.sendMessage(tabs[0].id, message, function (response) { if (callback) callback(response); }); }); }
|
1 2 3 4 5 6 7 8
| chrome.runtime.onMessage.addListener((request, sender, sendResponse) => { if (request.remove) { removeFigureMonster(); } if (request.download) { downloadPng(); } });
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| { "manifest_version": 2, "name": "去水印!", "version": "0.0.1", "description": "去除主流作图网站的明水印,并下载!", "icons": { "16": "libs/icon/logo1.png", "48": "libs/icon/logo1.png", "128": "libs/icon/logo1.png" }, "background": { "page": "libs/html/background.html" }, "browser_action": { "default_icon": "libs/icon/logo1.png", "default_title": "去除主流作图网站的明水印,并下载!", "default_popup": "libs/html/popup.html" }, "content_scripts": [ { "matches": ["<all_urls>"], "js": ["/libs/plugin/htmltocanvas.js", "libs/js/content.js"], "run_at": "document_start" } ], "permissions": ["contextMenus"] }
|
自此一个谷歌插件就简单的完成
源代码
最后
以上仅仅为技术交流~ 大家不要在实际的场景盲目使用,使用正规的途径。商用还需购买版权,支持原创!
参考文档
1、从破解某设计网站谈前端水印(详细教程)
2、【干货】Chrome 插件(扩展)开发全攻略