这篇文章主要介绍“node.js怎么去水印”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“node.js怎么去水印”文章能帮助大家解决问题。
一、封装一个函数来识别要解析的类型
// 获取类型 get_type(){ if(this.url.match(/http[s]?://v.douyin.com/[^ ]+/) != null){ console.log("识别到【dy】链接") return "dy" } else if(this.url.match(/http[s]?://v.kuaishou.com/[^ ]+/) != null){ console.log("识别到【ks】链接") return "ks" } else if(this.url.match(/http[s]?://xhslink.com/[^ ]+/) != null){ console.log("识别到【xhs】链接") return "xhs" } else{ console.log("未识别到链接类型,请输入正确的链接") return null } }
二、在初始化方法中写入本实例共用的数据
// 初始化方法 constructor() { this.token = "Z1QljZOZiT4NTG" // token // 请求地址数组对象 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 = '' // 用来存储识别到的类型 }
三、封装一个“万能解析”的方法
// 万能解析 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 => { // 校验是否解析成功 if(resp.data.code != 200 && resp.data.msg != "OK"){ console.log("解析失败") } else{ // 获取到解析后的数据 const data = resp.data.data console.log(data) var type = data.type // 类型:1视频 2图片集 var title = data.title // 标题 var cover_url = data.cover_url // 封面地址 var video_url = data.video_url // 无水印视频地址 var imgs = data.imgs // 无水印图片数组 } }) }
废话不多说 直接上完整代码????
const axios = require('axios') class Parse{ // 初始化方法 constructor() { this.token = "Z1QljZOZiT4NTG" // token // 请求地址数组对象 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 = '' // 用来存储识别到的类型 } // 万能解析 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 => { // 校验是否解析成功 if(resp.data.code != 200 && resp.data.msg != "OK"){ console.log("解析失败") } else{ // 获取到解析后的数据 const data = resp.data.data console.log(data) var type = data.type // 类型:1视频 2图片集 var title = data.title // 标题 var cover_url = data.cover_url // 封面地址 var video_url = data.video_url // 无水印视频地址 var imgs = data.imgs // 无水印图片数组 } }) } // 获取类型 get_type(){ if(this.url.match(/http[s]?://v.douyin.com/[^ ]+/) != null){ console.log("识别到【dy】链接") return "dy" } else if(this.url.match(/http[s]?://v.kuaishou.com/[^ ]+/) != null){ console.log("识别到【ks】链接") return "ks" } else if(this.url.match(/http[s]?://xhslink.com/[^ ]+/) != null){ console.log("识别到【xhs】链接") return "xhs" } else{ console.log("未识别到链接类型,请输入正确的链接") return null } } // 使用正则区分要解析的链接是哪个平台的【dy、ks、xhs】 run(url){ // 1、把url保存给实例变量【方便后期使用】 this.url = url // 1、获取类型 this.type = this.get_type(); if(!this.type){ return } // 2、调用万能解析 this.parse_video() } } if(__filename === process.mainModule.filename) { // new一个Parse对象 const p = new Parse() // 调用run方法 p.run("https://v.douyin.com/hoDBW9H") p.run("https://v.kuaishou.com/C75B2q") p.run("http://xhslink.com/fKihbj") }
补充:除了使用axios网络请求第三方平台交互之外,还可以使用第三方库来实现去水印功能,例如使用jimp库,实例代码如下:
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; // 计算水印宽高缩放比例 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'); }); });