node.js去水印方法實(shí)例分析
一、封裝一個(gè)函數(shù)來(lái)識(shí)別要解析的類型
// 獲取類型 get_type(){ if(this.url.match(/http[s]?:\/\/v\.douyin\.com\/[^ ]+/) != null){ console.log("識(shí)別到【dy】鏈接") return "dy" } else if(this.url.match(/http[s]?:\/\/v\.kuaishou.com\/[^ ]+/) != null){ console.log("識(shí)別到【ks】鏈接") return "ks" } else if(this.url.match(/http[s]?:\/\/xhslink\.com\/[^ ]+/) != null){ console.log("識(shí)別到【xhs】鏈接") return "xhs" } else{ console.log("未識(shí)別到鏈接類型,請(qǐng)輸入正確的鏈接") return null } }
二、在初始化方法中寫入本實(shí)例共用的數(shù)據(jù)
// 初始化方法 constructor() { this.token = "Z1QljZOZiT4NTG" // token // 請(qǐng)求地址數(shù)組對(duì)象 this.req_urls = { dy: "http://api.txapi.cn/v1/parse_short_video/dy", ks: "http://api.txapi.cn/v1/parse_short_video/ks", xhs: "http://api.txapi.cn/v1/parse_short_video/xhs", } this.url = '' // 要解析的地址 this.type = '' // 用來(lái)存儲(chǔ)識(shí)別到的類型 }
三、封裝一個(gè)“萬(wàn)能解析”的方法
// 萬(wàn)能解析 parse_video(){ axios({ url: this.req_urls[this.type], method: 'POST', headers: { 'Content-Type': "application/x-www-form-urlencoded" }, responseType: 'json', data: { token: this.token, url: this.url } }) .then(resp => { // 校驗(yàn)是否解析成功 if(resp.data.code != 200 && resp.data.msg != "OK"){ console.log("解析失敗") } else{ // 獲取到解析后的數(shù)據(jù) const data = resp.data.data console.log(data) var type = data.type // 類型:1視頻 2圖片集 var title = data.title // 標(biāo)題 var cover_url = data.cover_url // 封面地址 var video_url = data.video_url // 無(wú)水印視頻地址 var imgs = data.imgs // 無(wú)水印圖片數(shù)組 } }) }
廢話不多說(shuō) 直接上完整代碼??
const axios = require('axios') class Parse{ // 初始化方法 constructor() { this.token = "Z1QljZOZiT4NTG" // token // 請(qǐng)求地址數(shù)組對(duì)象 this.req_urls = { dy: "http://api.txapi.cn/v1/parse_short_video/dy", ks: "http://api.txapi.cn/v1/parse_short_video/ks", xhs: "http://api.txapi.cn/v1/parse_short_video/xhs", } this.url = '' // 要解析的地址 this.type = '' // 用來(lái)存儲(chǔ)識(shí)別到的類型 } // 萬(wàn)能解析 parse_video(){ axios({ url: this.req_urls[this.type], method: 'POST', headers: { 'Content-Type': "application/x-www-form-urlencoded" }, responseType: 'json', data: { token: this.token, url: this.url } }) .then(resp => { // 校驗(yàn)是否解析成功 if(resp.data.code != 200 && resp.data.msg != "OK"){ console.log("解析失敗") } else{ // 獲取到解析后的數(shù)據(jù) const data = resp.data.data console.log(data) var type = data.type // 類型:1視頻 2圖片集 var title = data.title // 標(biāo)題 var cover_url = data.cover_url // 封面地址 var video_url = data.video_url // 無(wú)水印視頻地址 var imgs = data.imgs // 無(wú)水印圖片數(shù)組 } }) } // 獲取類型 get_type(){ if(this.url.match(/http[s]?:\/\/v\.douyin\.com\/[^ ]+/) != null){ console.log("識(shí)別到【dy】鏈接") return "dy" } else if(this.url.match(/http[s]?:\/\/v\.kuaishou.com\/[^ ]+/) != null){ console.log("識(shí)別到【ks】鏈接") return "ks" } else if(this.url.match(/http[s]?:\/\/xhslink\.com\/[^ ]+/) != null){ console.log("識(shí)別到【xhs】鏈接") return "xhs" } else{ console.log("未識(shí)別到鏈接類型,請(qǐng)輸入正確的鏈接") return null } } // 使用正則區(qū)分要解析的鏈接是哪個(gè)平臺(tái)的【dy、ks、xhs】 run(url){ // 1、把url保存給實(shí)例變量【方便后期使用】 this.url = url // 1、獲取類型 this.type = this.get_type(); if(!this.type){ return } // 2、調(diào)用萬(wàn)能解析 this.parse_video() } } if(__filename === process.mainModule.filename) { // new一個(gè)Parse對(duì)象 const p = new Parse() // 調(diào)用run方法 p.run("https://v.douyin.com/hoDBW9H") p.run("https://v.kuaishou.com/C75B2q") p.run("http://xhslink.com/fKihbj") }
補(bǔ)充:除了使用axios網(wǎng)絡(luò)請(qǐng)求第三方平臺(tái)交互之外,還可以使用第三方庫(kù)來(lái)實(shí)現(xiàn)去水印功能,例如使用jimp庫(kù),實(shí)例代碼如下:
const Jimp = require('jimp'); // 讀取原圖 Jimp.read('source.png').then(image => { // 讀取水印圖 Jimp.read('watermark.png').then(watermark => { // 獲取原圖和水印圖的寬高 const width = image.bitmap.width; const height = image.bitmap.height; const wmWidth = watermark.bitmap.width; const wmHeight = watermark.bitmap.height; // 計(jì)算水印寬高縮放比例 const scale = width / wmWidth; // 縮放水印圖 watermark.scale(scale); // 將水印圖繪制到原圖上 image.composite(watermark, 0, 0, { mode: Jimp.BLEND_SOURCE_OVER, opacitySource: 1, opacityDest: 1 }); // 保存處理后的圖片 image.write('result.png'); }); });
- node.js實(shí)現(xiàn)為PDF添加水印的示例代碼
- 使用Node.js給圖片加水印的方法
- Node.js批量給圖片加水印的方法
- Node.js中Express框架使用axios同步請(qǐng)求(async+await)實(shí)現(xiàn)方法
- nodejs+axios爬取html出現(xiàn)中文亂碼并解決示例
- node+axios實(shí)現(xiàn)服務(wù)端文件上傳示例
- 利用node+koa+axios實(shí)現(xiàn)圖片上傳和回顯功能
- Node.js 使用axios讀寫influxDB的方法示例
- JavaScript利用油猴腳本實(shí)現(xiàn)去水印功能
- 使用python實(shí)現(xiàn)簡(jiǎn)單去水印功能
相關(guān)文章
nodejs中內(nèi)置模塊fs,path常見的用法說(shuō)明
這篇文章主要介紹了nodejs中內(nèi)置模塊fs,path常見的用法說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-11-11Node.js使用第三方插件nodemailer實(shí)現(xiàn)郵件發(fā)送示例
這篇文章主要為大家介紹了Node.js使用第三方插件nodemailer實(shí)現(xiàn)郵件發(fā)送示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11整理幾個(gè)關(guān)鍵節(jié)點(diǎn)深入理解nodejs
這篇文章主要介紹了整理幾個(gè)關(guān)鍵節(jié)點(diǎn)深入理解nodejs,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,需要的小伙伴可以參考一下,需要的小伙伴可以參考一下2022-07-07node.JS md5加密中文與php結(jié)果不一致的解決方法
本篇文章主要介紹了node.JS md5加密中文與php結(jié)果不一致的解決方法,具有很好的參考價(jià)值。下面跟著小編一起來(lái)看下吧2017-05-05nodemailer郵箱發(fā)送驗(yàn)證碼的實(shí)現(xiàn)
郵箱注冊(cè)是常見的功能,通常需要發(fā)送郵箱驗(yàn)證碼驗(yàn)證,本文就來(lái)介紹一下nodemailer郵箱發(fā)送驗(yàn)證碼的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下2023-10-10淺談Express.js解析Post數(shù)據(jù)類型的正確姿勢(shì)
這篇文章主要介紹了Express.js解析Post數(shù)據(jù)類型的正確姿勢(shì),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-05-05NodeJS使用formidable實(shí)現(xiàn)文件上傳
這篇文章主要為大家詳細(xì)介紹了NodeJS使用formidable實(shí)現(xiàn)文件上傳的相關(guān)方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-10-10Node.js中使用事件發(fā)射器模式實(shí)現(xiàn)事件綁定詳解
這篇文章主要介紹了Node.js中使用事件發(fā)射器模式實(shí)現(xiàn)事件綁定詳解,本文一并講解了回調(diào)模式、發(fā)射器模式、事件類型等基礎(chǔ)知識(shí)做了補(bǔ)充,需要的朋友可以參考下2014-08-08