微信小程序免费《短视频去水印》

分享一个uniapp开发的微信小程序免费《短视频去水印》小程序

请添加图片描述
在这里插入图片描述

<template><view class="content"><view class="area-wrap"><textarea name="" v-model="state.content" maxlength="800" id="" cols="30" rows="10" placeholder-class="plc"placeholder="请输入分享链接/分享内容"></textarea><view class="count">{{state.content.length}}/800</view></view><uv-row customStyle="margin-bottom: 10px" justify="end"><uv-col span="3"><uv-button :text="state.content?'清空':'粘贴'" @click="clearOrpaste"></uv-button></uv-col><uv-col span="3" offset="1"><uv-button :disabled="state.resolved" :text="state.content?'开始解析':'粘贴并解析'" type="primary"@click="startAnalyzing"></uv-button></uv-col></uv-row><view class="wrap"><view v-if="state.result.video_url"><view class="title">无水印视频</view><video :src="state.result.video_url"></video><uv-button style="margin-top: 20rpx;" type="primary" text="" @click="saveVideo(state.result.video_url)"><text class="iconfont icon-download"></text><text>保存视频</text></uv-button></view><view v-if="state.result.title"><view class="title">标题</view><view class="title-content">{{state.result.title}}</view><uv-button style="margin-top: 20rpx;" type="primary" text="" @click="copy(state.result.title)"><text class="iconfont icon-copy"></text><text>复制标题</text></uv-button></view><view v-if="state.result.cover_url"><view class="title">封面</view><image @click="preview(state.result.cover_url)" class="cover_url" :src="state.result.cover_url"mode="aspectFill"></image><uv-button icon-color="#fff" style="margin-top: 20rpx;" type="primary" text=""@click="saveImg(state.result.cover_url)"><text class="iconfont icon-download"></text><text>保存封面</text></uv-button></view></view></view>
</template>
<script setup>
import {getCurrentInstance,reactive,watch} from "vue"import {onLoad,onShareAppMessage,onShareTimeline} from "@dcloudio/uni-app"const {proxy,appContext} = getCurrentInstance()const {req} = appContext.config.globalProperties;const {toast,containsURL} = appContext.config.globalProperties._;const state = reactive({content: "",result: {cover_url: "",title: "",video_url: "",resolved: false}})watch(() => state.content, val => {if (val == "") {state.resolved = false}})onShareAppMessage(() => {return {title: "轻便短视频去水印",path: "/pages/index/index"}})onShareTimeline(() => {return {title: "轻便短视频去水印",path: "/pages/index/index"}})async function startAnalyzing() {if (state.resolved) returnif (!state.content) {let data = await getClipboardData()if (data) {state.content = data}}if (!state.content) return toast("分享内容不能为空")const isUrl = containsURL(state.content)if (!isUrl) return toast("分享地址格式错误")uni.showLoading({title: "解析中...",mask: true})req.get("/video/share/url/parse", {params: {url: state.content}}).then(res => {uni.hideLoading()state.resolved = trueconst {cover_url,title,video_url} = resstate.result.cover_url = cover_urlstate.result.title = titlestate.result.video_url = video_url})}function getClipboardData() {return new Promise((resolve, reject) => {uni.getClipboardData({success: function(res) {resolve(res.data)},fail() {reject(data)}});})}function clearOrpaste() {if (state.content) {// 清除操作state.content = ""state.resolved = false} else {// 粘贴操作uni.getClipboardData({success: function(res) {state.content = res.data}});}}function copy(content) {uni.setClipboardData({data: content,success() {toast("已复制")}})}function saveVideo(val) {uni.showLoading({title: "保存中..."})const downloadTask = uni.downloadFile({url: val,success(res) {uni.saveVideoToPhotosAlbum({filePath: res.tempFilePath,success(e) {toast("保存成功", "success")},fail(err) {if (err.errMsg == "saveVideoToPhotosAlbum:fail auth deny") {uni.showModal({title: "提示",content: "需要您授权保存相册",confirmText: "点击授权",success(res) {if (res.confirm) {uni.openSetting({success: setting => {if (setting.authSetting['scope.writePhotosAlbum']) {uni.showModal({title: '提示',content: '获取权限成功,再次点击下载即可保存',showCancel: false,})} else {uni.showModal({title: '提示',content: '获取权限失败,将无法保存到相册哦',showCancel: false,})}}})}},})} else {toast("保存失败")}req.post("/bugReport", {method: "saveVideoToPhotosAlbum",data: res.tempFilePath,error: JSON.stringify(err),})}})},fail(err) {req.post("/bugReport", {method: "downloadFile",data: val,error: JSON.stringify(err)})toast("保存失败")}})downloadTask.onProgressUpdate((res) => {// console.log('下载进度' + res.progress);if (res.progress >= 100) {uni.hideLoading()}});}function saveImg(val) {uni.downloadFile({url: val,success(res) {uni.saveImageToPhotosAlbum({filePath: res.tempFilePath,success() {toast("保存成功", "success")},fail(err) {if (err.errMsg == "saveImageToPhotosAlbum:fail auth deny") {uni.showModal({title: "提示",content: "需要您授权保存相册",confirmText: "点击授权",success(res) {if (res.confirm) {uni.openSetting({success: setting => {if (setting.authSetting['scope.writePhotosAlbum']) {uni.showModal({title: '提示',content: '获取权限成功,再次点击下载即可保存',showCancel: false,})} else {uni.showModal({title: '提示',content: '获取权限失败,将无法保存到相册哦',showCancel: false,})}}})}},})} else {toast("保存失败")}req.post("/bugReport", {method: "saveImageToPhotosAlbum",data: res.tempFilePath,error: JSON.stringify(err)})}})},fail(err) {req.post("/bugReport", {method: "downloadFile",data: val,error: JSON.stringify(err)})toast("保存失败")}})}function preview(url) {uni.previewImage({urls: [url]})}</script>
<style lang="scss">.iconfont {margin-right: 20rpx;font-size: 40rpx;}.title-content {border-radius: 5rpx;padding: 10rpx;width: 100%;box-sizing: border-box;border: 1rpx dashed #999;margin-bottom: 20rpx;}.cover_url {width: 100%;height: 600rpx;}video {width: 100%;}.title {font-size: 36rpx;font-weight: bold;margin: 40rpx 0;padding-left: 30rpx;position: relative;&::before {content: "";position: absolute;width: 14rpx;height: 40rpx;background-color: $theme-color;left: 0;top: 50%;border-radius: 10rpx;transform: translateY(-50%);}}.plc {font-size: 28rpx;}.area-wrap {background-color: #fff;width: 100%;padding: 20rpx;padding-bottom: 10rpx;border-radius: 5rpx;box-sizing: border-box;margin-bottom: 20rpx;textarea {![请添加图片描述](https://i-blog.csdnimg.cn/direct/714d26ef190e4715a33978b157197fd3.png)font-size: 28rpx;width: 100%;}.count {margin-top: 10rpx;font-size: 24rpx;color: #999;text-align: right;}}page {padding: 24rpx;box-sizing: border-box;}
</style>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/402711.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

~Keepalived高可用集群~

一、Keepalived简介 是一个用于实现高可用性的解决方案&#xff0c;它主要应用于云主机的主备切换&#xff0c;以达到高可用性&#xff08;HA&#xff09;的目的。当主服务器发生故障无法对外提供服务时&#xff0c;动态将虚拟IP切换到备服务器&#xff0c;继续对外提供服务&a…

宏定义———C语言

*符号代表全部的意思*.i代表的是全部的点i文件 宏定义 &#xff1a; 1.定义&#xff1a; #define 宏名 常量功能&#xff1a;宏名代替常量&#xff0c;宏名要求全大写且见名知义 2.示例&#xff1a; #include <stdio.h> #define PI 3.14 #define Q 4 #define P QQi…

虚幻5|给武器添加碰撞检测与伤害

本章内容衔接上两章&#xff0c;需要完成上两章才能用本章内容 虚幻5|角色武器装备的数据库学习&#xff08;不只是用来装备武器&#xff0c;甚至是角色切换也很可能用到&#xff09;-CSDN博客虚幻5|普通攻击&#xff0c;使用接口更方便-CSDN博客 如有疑问&#xff0c;可访问…

利用EditPlus进行Json数据格式化

利用EditPlus进行Json数据格式化 git下载地址&#xff1a;https://github.com/michael-deve/CommonData-EditPlusTools.git (安装过editplus的直接将里面的json.js文件复制走就行) 命令&#xff1a;Cscript.exe /nologo “D:\Program Files (x86)\EditPlus 3\json.js” D:\P…

简单的敏感词提示功能

简单的敏感词提示功能 1. 需求 公司现在接到通知&#xff0c;部分接口的部分手动输入字段&#xff0c;需要新增敏感词报红提示&#xff0c;敏感词汇现在应该是7000多个左右&#xff0c;需要我们提供一个敏感词校验接口&#xff0c;如果前端输入敏感词&#xff0c;则前端提示出…

【网络】UDP回显服务器和客户端的构造,以及连接流程

文章目录 回显服务器&#xff08;Echo Server&#xff09;0. 构造方法1. 接收请求2. 根据请求计算响应3. 将响应写回客户端4. 完整代码 客户端&#xff08;Echo Client&#xff09;0. 构造方法1. 读取输入2. 构造一个 UDP 请求3. 从服务器读取响应4. 完整代码 服务器与客户端连…

【自动化测试】技术交流论坛

前言 本篇使用Selenium3Junit5对个人技术交流论坛进行简单的自动化测试&#xff0c;如有错误&#xff0c;请在评论区指正&#xff0c;让我们一起交流&#xff0c;共同进步&#xff01; 文章目录 前言1. 项目基础描述2. 编写手工测试用例3. 测试用例转自动化测试用例3.1 前置准…

NVR方案背景与产品介绍与构建一套完整的NVR产品解决方案

一、NVR和DVR 在视频监控领域&#xff0c;DVR和NVR是两种常用的录像技术。它们在系统结构、视频处理、存储和访问方式等方面存在明显的区别。&#xff0c;但都在视频监控中扮演着重要的角色。首先来了解它们的区别和特点&#xff0c;这有助于在选择合适的设备时做出明智的决策…

C语言第20天笔记

文件操作 概述 什么是 文件 文件时保存在外存储器上&#xff08;一般代指磁盘&#xff0c;也可以是U盘、移动硬盘等&#xff09;的数据的集合。 文件操作体现在哪几个方面 1. 文件内容的读取 2. 文件内容的写入 数据的读取和写入可被视为针对文件进行输入和输出的操作&a…

pytorch实现单层线性回归模型

文章目录 简述代码重构要点 数学模型、运行结果数据构建与分批模型封装运行测试 简述 python使用 数值微分法 求梯度&#xff0c;实现单层线性回归-CSDN博客 python使用 计算图&#xff08;forward与backward&#xff09; 求梯度&#xff0c;实现单层线性回归-CSDN博客 数值微分…

24/8/17算法笔记 策略梯度reinforce算法

import gym from matplotlib import pyplot as plt %matplotlib inline#创建环境 env gym.make(CartPole-v0) env.reset()#打印游戏 def show():plt.imshow(env.render(mode rgb_array))plt.show() show()定义网络模型 import torch #定义模型 model torch.nn.Sequential(t…

希亦、洁盟、苏泊尔眼镜清洗机哪款好用?热门眼镜清洗机测评总结

随着科学技术的发展&#xff0c;电子设备的升级&#xff0c;越来越多的人开始戴眼镜&#xff0c;而眼镜由于长时间的佩戴&#xff0c;镜框以及镜面都积累了一些灰尘以及人们肉眼所看不见的细菌&#xff0c;但是如果你使用普通的清洁方式去清洗的话肯定是清洗不干净的&#xff0…

【protobuf】ProtoBuf——proto3语法详解、字段规则、消息类型的定义与使用、通讯录的写入和读取功能实现

文章目录 ProtoBuf5. proto3语法详解5.1 字段规则5.2 消息类型的定义与使用 ProtoBuf 5. proto3语法详解 在语法详解部分&#xff0c;依旧通过项目推进的方式开展教学。此部分会对通讯录多次升级&#xff0c;用 2.x 表示升级的版本&#xff0c;最终将完成以下内容的升级&#x…

海康VisionMaster使用学习笔记4-快速匹配模块

快速匹配模块 快速匹配包括基本参数,特征模板,运行参数,结果显示 基本参数 可以修改图像源和模块的ROI区域. 特征模版 可以配置管理所有的模版,点击创建可以新增模版,也可以通过载入加载本地的模型 建立新模版 点击创建,可以选择当前图像或本地图像进行建模 模版存图按…

使用docker compose一键部署 Portainer

使用docker compose一键部署 Portainer Portainer 是一款轻量级的应用&#xff0c;它提供了图形化界面&#xff0c;用于方便地管理Docker环境&#xff0c;包括单机环境和集群环境。 1、创建安装目录 mkdir /data/partainer/ -p && cd /data/partainer2、创建docker…

uni-app 使用九宫格(uni-grid)布局组件

1、运行环境 开发工具为 HBuilder X 4.23, 操作系统为 Windows 11。Vue.js 版本为 3. 2、操作步骤 首先&#xff0c;登录 HBuilder X。然后用桌面浏览器&#xff0c;访问官网组件网址。 https://ext.dcloud.net.cn/plugin?nameuni-grid 在组件网址右上角、点击“下载插…

每日一题-贪心算法

122. 买卖股票的最佳时机 II - 力扣&#xff08;LeetCode&#xff09; 55. 跳跃游戏 - 力扣&#xff08;LeetCode&#xff09; 这个题目一开始肯定是会懵&#xff0c;就比如说一开始先跳几步&#xff0c;之后再怎么跳&#xff0c;其实我们就可以用最大范围来算就行了&#xff0…

开发笔记:uniapp+vue+微信小程序 picker +后端 省市区三级联动

写在前面 未采用: 前端放置js 或者 json文件进行 省市区三级联动 采用&#xff1a; 前端组件 后端接口实现三级联动 原因&#xff1a;首先微信小程序有大小限制&#xff0c;能省则省&#xff0c;其次&#xff1a;方便后台维护省市区数据&#xff0c;完整省市区每年更新好像…

SQL基础教程(八)SQL高级处理

※食用指南&#xff1a;文章内容为《SQL基础教程》系列学习笔记&#xff0c;该书对新手入门非常友好&#xff0c;循序渐进&#xff0c;浅显易懂&#xff0c;本人主要用来补全学习MySQL中未涉及的部分&#xff0c;便于刷题和做项目。 官方电子书&#xff1a;《SQL基础教程》第2…

Web安全:SqlMap工具

一、简介 sqlmap 是一款开源的渗透测试工具&#xff0c;可以自动化进行SQL注入的检测、利用&#xff0c;并能接管数据库服务器。它具有功能强大的检测引擎,为渗透测试人员提供了许多专业的功能并且可以进行组合&#xff0c;其中包括数据库指纹识别、数据读取和访问底层文件系统…