node.js怎么去水印

发布时间:2023-04-15 10:51:16 作者:iii
来源:亿速云 阅读:119

这篇文章主要介绍“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');
  });
});

关于“node.js怎么去水印”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注亿速云行业资讯频道,小编每天都会为大家更新不同的知识点。

推荐阅读:
  1. 为什么大牛那么钟爱node.js
  2. Node.js学习之静态资源服务器有什么用

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

node.js

上一篇:2023年IDEA最新永久激活的方法是什么

下一篇:Java中Map与JSON数据之间怎么互相转化

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》