【进阶】uniapp复现微信相册功能之【图视频编辑 + 压缩】
基于uniapp + vue实现微信相册,在实现了微信相册的基础上增加以下功能
1: 图片编辑
2: 视频编辑
3: 文件压缩


技术实现
- 开发环境:HbuilderX + nodejs
- 技术框架:uniapp + vue2.x
- 测试环境:App端(Android + IOS)
- 代码:开源
效果概览



业务分析

这里主要是承接上次写的仿微信相册(https://www.yuque.com/zhimikeji/zdtppo/hmhvn6)的继续扩展下去,对于插件而言,当用户点击图片非选区的位置的时候,插件会调用回调事件反馈点击编辑事件,具体如下:
// 相册事件回调
AlbumCallbackHanlder (res) {
let { type, data } = res
switch (type) {
// 触发点击编辑图视频
case 'onClickEditImage':
// 这里的data就是触发的文件路径
console.log(res);
break;
default:
console.log(res)
break;
}
}
当我们触发了编辑事件之后,我们就可以开始调用api执行编辑图视频
编辑图视频
编辑图视频相对来说简单,我们只需要传入文件路径,插件自己内部会自动解析应该是编辑图片还是编辑视频,但是我们提供的路径必须是原生可识别的路径, 以 / 开头。如果是特殊路径,可以使用plus自带的方法进行路径转换,具体如下:
let localPath = plus.io.convertLocalFileSystemURL(path)
引入插件对象
var sdkwx = uni.requireNativePlugin('Zhimi-EditImage');
编辑图视频
// path 原文件路径
// distPath 编辑后文件保存路径
sdkwx.edit(path, distPath => {
console.log(distPath)
})
这里其实很简单的就是传入路径之后就会弹出来文件编辑界面,但是不一样的是如果我们编辑之后需要同步的更新到相册中,我们需要调用以下方法
更新相册Item
// 这里编辑完成之后调用,过后调用默认更新最后一次编辑的文件
albumView.changeListEditImage(path)
图片视频压缩
在这里一般得到的是原图,原视频。随着现在手机设备的性能提升,相机分辨率也随之提升,拍出来的视频图片往往已经超过了1080p的范畴了,对于服务器来说压力非常在,在这里我们可以通过插件内置的压缩模块压缩图片视频,一共有3种压缩方式。

引入压缩模块
var sdkwx = uni.requireNativePlugin('Zhimi-compression');
压缩图片
// 0.5 压缩质量比
// path 传入文件路径,/ 开头
// distPath 返回文件路径, / 开头,前端显示要加file:// 前缀
sdkwx.compressPicQuality(0.5, path, distPath => {
console.log(distPath)
})
缩放图片
// 750 目标高度
// path 传入文件路径,/ 开头
// distPath 返回文件路径, / 开头,前端显示要加file:// 前缀
sdkwx.compressPicSize(750, path, distPath => {
console.log(distPath)
})
压缩视频
// path 传入文件路径,/ 开头
// 10 超过10M体积才压缩视频,根据插件内置算法自动压缩,单位M
// distPath 返回文件路径, / 开头,前端显示要加file:// 前缀
sdkwx.compressVideo(path, 10, distPath => {
console.log(distPath)
})
这里还是需要注意的一点就是文件路径的问题,传入给插件的路径需要是 / 开头,因为原生是不认uniapp的_doc, _www之类开头的特殊路径的,如果是特殊路径,最好先转化一遍,用plus的方法就可以完美转成原生路径啦
let localPath = plus.io.convertLocalFileSystemURL(path)
ok,到这里对于uniapp实现微信相册扩展出图视频压缩的功能就分享结束啦,希望感兴趣的小伙伴可以动手试试看哦
【进阶】uniapp复现微信相册功能之【图视频编辑 + 压缩】的更多相关文章
- uniapp框架如何实现仿微信相册:图视频过滤、相册选择功能
今天我们分享基于uniapp + vue实现仿微信相册插件实例,该插件完全还原了微信相册的功能 1: 相册选择 2: 图片,视频类型过滤 3: 自定义相册界面UI 技术实现 开发环境:Hbuilder ...
- uni-app聊天室|vue+uniapp仿微信聊天实例|uniapp仿微信App界面
一.介绍 运用UniApp+Vue+Vuex+swiper+uniPop等技术开发的仿微信原生App聊天室|仿微信聊天界面实例项目uniapp-chatroom,实现了发送图文消息.表情(gif图), ...
- [5] 微信公众号开发 - 微信支付功能开发(网页JSAPI调用)
1.微信支付的流程 如下三张手机截图,我们在微信网页端看到的支付,表面上看到的是 "点击支付按钮 - 弹出支付框 - 支付成功后出现提示页面",实际上的核心处理过程是: 点击支付按 ...
- 微信公众号开发 [05] 微信支付功能开发(网页JSAPI调用)
1.微信支付的流程 如下三张手机截图,我们在微信网页端看到的支付,表面上看到的是 "点击支付按钮 - 弹出支付框 - 支付成功后出现提示页面",实际上的核心处理过程是: 点击支付按 ...
- 转:HTML5页面如何在手机端浏览器调用相机、相册功能
HTML5页面如何在手机端浏览器调用相机.相册功能 开发微信端浏览器访问的HTML5的页面,页面中有一个<input id="input" type="file&q ...
- Bing Maps进阶系列四:路由功能服务(RouteService)
Bing Maps进阶系列四:路由功能服务(RouteService) Bing Maps提供的路由功能服务(RouteService)可以实现多方位的计算地图上的路线指示,路径行程等功能,比如说实现 ...
- 使用uni-app开发微信小程序
uni-app 开发微信小程序 前言 9月份,开始开发微信小程序,也曾调研过wepy/mpvue,考虑到后期跨端的需求,最终选择使用了uni-app,本文主要介绍如何使用uni-app搭建小程序项目, ...
- HTML5页面如何在手机端浏览器调用相机、相册功能
最近在做一个公司的保险信息处理系统项目,开发微信端浏览器访问的HTML5的页面,页面中有一个<input id="input" type="file"/& ...
- php框架tp3.2.3和js写的微信分享功能心得,分享的标题内容图片自定义
https://blog.csdn.net/weixin_42231483/article/details/81585322 最近用PHP的tp3.2.3框架和js写的微信分享功能心得,分享的标题内容 ...
随机推荐
- 面向对象编程之Python学习一
在实际的程序设计中,使用Java面向对象编程方法编写算法能够很清楚的理解其来龙去脉. 习惯了面向对象思维,学习Python也自然使用这种思维. 目前,由于Python很多软件包能够容易的获取和利用,人 ...
- 解决texlive化学式转换镜像经常偶发性进程堆积导致卡顿问题
前言 之前在 使用Python定时清理运行超时的pdflatex僵尸进程 博文中我采用python脚本开启定时任务清理pdflatex僵尸进程,线上4u2G的k8s pod部署了3个,pdflatex ...
- 洛谷 P5233 - [JSOI2012]爱之项链(Polya 定理+递推)
洛谷题面传送门 首先很明显题目暗示我们先求出符合条件的戒指数量,再计算出由这些戒指能够构成的项链的个数,因此考虑分别计算它们.首先是计算符合条件的戒指数量,题目中"可以通过旋转重合的戒指视作 ...
- Codeforces 1109F - Sasha and Algorithm of Silence's Sounds(LCT)
Codeforces 题面传送门 & 洛谷题面传送门 讲个笑话,这题是 2020.10.13 dxm 讲题时的一道例题,而我刚好在一年后的今天,也就是 2021.10.13 学 LCT 时做到 ...
- [ARC098B] Xor Sum 2
关于异或运算和代数和运算有很不错的性质: \(xor_{i = 1} ^ {n}a_i \leq \sum_{i = 1} ^ n a_i\) 所以我们考虑一段区间按题目来说是合法的,即 \(xor_ ...
- 洛谷 P6222 - 「P6156 简单题」加强版(莫比乌斯反演)
原版传送门 & 加强版传送门 题意: \(T\) 组数据,求 \(\sum\limits_{i=1}^n\sum\limits_{j=1}^n(i+j)^k\mu^2(\gcd(i,j))\g ...
- CF1073G Yet Another LCP Problem
题目传送门. 题意简述:给出 \(s\),多次询问给出长度分别为 \(k,l\) 的序列 \(a,b\),求 \(\sum_{i=1}^k\sum_{j=1}^l\mathrm{LCP}(s[a_i: ...
- Linux服务器I/O性能分析-1
一.IOSTAT误区 1.1 误区-svctm Linux上的svctm是重要的I/O指标(I/O平均服务时间-单位毫秒),这个值直接反映了硬件的性能(I/O请求从SCSI层发出--->I/O完 ...
- javaSE高级篇3 — 网络编程 — 更新完毕
网络编程基础知识 先来思考两个问题( 在这里先不解决 ) 如何准确的找到一台 或 多台主机? 找到之后如何进行通讯? 网络编程中的几个要素 IP 和 端口号 网络通讯协议:TCP / UDP 最后一句 ...
- Spark(八)【利用广播小表实现join避免Shuffle】
目录 使用场景 核心思路 代码演示 正常join 正常left join 广播:join 广播:left join 不适用场景 使用场景 大表join小表 只能广播小表 普通的join是会走shuff ...