node.js去水印方法实例分析
短信预约 -IT技能 免费直播动态提醒
一、封装一个函数来识别要解析的类型
// 获取类型
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("/file/imgs/upload/202305/15/cprjmfonoiu').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');
});
});
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341