首先创建一个compress.js文件(以下是文件中图片压缩方法)

/*** APP端图片压缩*  参数说明:*  img 图片url*  scale缩放比例 1-100*  callback 回调设置返回值
*/
export function translateapp(img, scale, callback) {plus.io.resolveLocalFileSystemURL(img, (entry) => { //通过URL参数获取目录对象或文件对象entry.file((file) => { // 可通过entry对象操作图片 console.log('压缩前图片信息:' + JSON.stringify(file)); //压缩前图片信息if (file.size > 504800) { //   如果大于500Kb进行压缩plus.zip.compressImage({ // 5+ plus.zip.compressImage 了解一下,有详细的示例src: img, //src: 压缩原始图片的路径    dst: img.replace('.png', 'yasuo.png').replace('.PNG','yasuo.PNG').replace('.jpg', 'yasuo.jpg').replace('.JPG', 'yasuo.JPG'),width: '40%', //dst: (String 类型 )压缩转换目标图片的路径,这里先在后面原始名后面加一个yasuo区分一下height: '40%', //width,height: (String 类型 )缩放图片的宽度,高度quality: scale, //quality: (Number 类型 )压缩图片的质量overwrite: true, //overwrite: (Boolean 类型 )覆盖生成新文件// format:'jpg'   //format: (String 类型 )压缩转换后的图片格式}, (event) => {console.log('压缩后图片信息:' + JSON.stringify(event)); //返回压缩后的图片路径callback(event.target);}, function(err) {console.log('Resolve file URL failed: ' + err.message);});} else { //else小于500kb跳过压缩,直接返回现有的srccallback(img);}});}, (e) => { // 返回错误信息console.log('Resolve file URL failed: ' + e.message);});}
/*** H5端图片压缩*  参数说明:*  imgSrc 图片url*  scale缩放比例 0-1*  type 返回图片类型  默认blob *  callback 回调设置返回值
*/
export function translate(imgSrc, scale, type , callback) {var img = new Image();img.src = imgSrc;img.onload = function() {var that = this;var h = that.height; // 默认按比例压缩var w = that.width;var canvas = document.createElement('canvas');var ctx = canvas.getContext('2d');var width = document.createAttribute("width");width.nodeValue = w;var height = document.createAttribute("height");height.nodeValue = h;canvas.setAttributeNode(width);canvas.setAttributeNode(height);ctx.drawImage(that, 0, 0, w,h);var base64 = canvas.toDataURL('image/jpeg', scale);//压缩比例canvas = null;if(type == 'base64'){callback(base64);}else{var blob = base64ToBlob(base64); var blobUrl = window.URL.createObjectURL(blob);//blob地址callback(blobUrl);}}
}
// base转Blob
export function base64ToBlob(base64) { var arr = base64.split(','),mime = arr[0].match(/:(.*?);/)[1],bstr = atob(arr[1]),n = bstr.length,u8arr = new Uint8Array(n);while (n--) {u8arr[n] = bstr.charCodeAt(n);}return new Blob([u8arr], {type: mime});
}

之后在script标签中引用

然后在拍照或选择图片后调用

uni.chooseImage({count: 6, //默认9sizeType: [ 'original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有sourceType: ['camera'], //从相册选择 albumsuccess: function (res) {//区分APP与H5不同端调用不同的方法// #ifdef APP-PLUS /*** APP端图片压缩*  参数说明:*  img 图片url*  scale缩放比例 1-100*  callback 回调设置返回值 */translateapp(res.tempFilePaths[0], 80, imgUrl => {//打印压缩后返回的图片urlconsole.log(imgUrl ); })// #endif// #ifdef H5/*** H5端图片压缩*  参数说明:*  imgSrc 图片url*  scale缩放比例 0-1*  type 返回图片类型:base64、blob(默认blob)   *  callback 回调设置返回值 */translate(res.tempFilePaths[0], 0.7, ' ', imgUrl => {//打印压缩后返回的图片url         console.log(imgUrl );   })// #endif}
});

uni-app 压缩图片相关推荐

  1. uniapp的uni.compressImage压缩图片的巨坑

    因需求,使用图片上传时候需要将图片压缩到1m以内,使用uni的这个组件,因为要调用后端的上传图片接口,所以用到了uni.uploadFile,本来我想的是先压缩再上传,结果我发现,压缩虽然能实现,但是 ...

  2. uni App多图片上传,java后台接收

    前台页面: <!-- 图片上传 --><wslimg title="图片上传" :num="9" :dataList="dataLi ...

  3. uni App+H5 实现人脸识别

    uni App+H5 实现人脸识别 通过h5的视频video管理设备摄像头(不要关),在打开视频摄像时快照截取人脸照片传送到后台通过API接口调用百度人脸识别结果并通过返回数据解析自己业务需求. 1. ...

  4. Android 高清加载巨图方案 拒绝压缩图片

    Android 高清加载巨图方案 拒绝压缩图片 转载请标明出处:  http://blog.csdn.net/lmj623565791/article/details/49300989:  本文出自: ...

  5. webp app推荐图片格式,更小更快减少oom

    一.什么是 WebP? WebP(发音 weppy,项目主页),是一种支持有损压缩和无损压缩的图片文件格式,派生自图像编码格式 VP8.根据 Google 的测试,无损压缩后的 WebP 比 PNG ...

  6. uni app map 地图 漂浮问题及方案

    uni app map 地图 漂浮问题及方案 文章页有图片导致的问题,图片没加载出来,导致文章内容高度不固定,如果图片没加载出来,高度就是0,如果此时开始加载map,那么map就在那里加载,map原生 ...

  7. takephoto 框架_GitHub - Smecking/TakePhoto: 一款用于在Android设备上获取照片(拍照或从相册、文件中选择)、裁剪图片、压缩图片的开源工具库...

    TakePhoto是一款用于在Android设备上获取照片(拍照或从相册.文件中选择).裁剪图片.压缩图片的开源工具库,目前最新版本4.0.2. 3.0以下版本及API说明,详见TakePhoto2. ...

  8. 小程序上传服务器图片压缩,微信小程序压缩图片并上传到服务器(拿去即用)...

    /**压缩图片*/compressionImage(tempFilePaths, params) { let that= thiswx.getImageInfo({ src: tempFilePath ...

  9. Android-JNI开发系列《十》实践利用libjpeg-turbo完美压缩图片不失真

    人间观察 步入社会后,你会发现,老人说的话都是对的. 前面讲了些Android的jni知识和bitmap的实践,接下来几篇应该都是Android中jni的一些实践.这篇我们对Android中图片在jn ...

  10. uniApp H5项目中的压缩图片

    子组件:选择相册还是拍照 并对相片进行压缩 成功之后把路径通过sFn方法传给父级,父级通过fFN方法走借口,对头像进行修改 <view class="main">< ...

最新文章

  1. 参加拥抱HTML5大会及TOPGEEK社区活动纪实
  2. 公司间采购的后台配置备忘录
  3. 剑指Offer - 面试题57 - II. 和为s的连续正数序列(滑动窗口)
  4. python处理时间和日期_python时间和日期的处理
  5. 二叉查找(排序)树/二叉树----建树,遍历
  6. Linux学习总结(25)——CentOS系统常识
  7. java过滤器Filter实现敏感词汇过滤
  8. Python3中的GBK、UTF-8和Unicode
  9. 数据库 | PostgreSQL从入门到精通
  10. 【实践1】Python调用搜狗语音,自制语音识别转文字生成字幕软件,并生成会议纪录。
  11. Ant Design Upload 文件上传功能
  12. 21700电池的优势和不足
  13. 编译原理第六七章总结
  14. zabbix4.0 zabbix-server.service never wrote its PID file. Failing.
  15. jquery UI 跟随学习笔记——拖拽(Draggable)
  16. 有趣的java代码_求一些有趣的java小程序?
  17. 检查软件下载是否完整 MD5 工具使用 ----- md5sum
  18. linux ps aux 命令解释
  19. 哈达玛矩阵的相关基础知识
  20. web在网页中引用字体包(.ttf)嵌入特殊字体

热门文章

  1. 腾讯云云服务器Centos系统安装MySQL数据库详细教程
  2. 基于CBO的SQL优化和Oracle实例优化
  3. 如何开展分销渠道管理
  4. Android Studio 配置Git,移动端h5页面开发教程百度云资源
  5. 常用 ajax js 表单
  6. RTT笔记-分析自动初始化机制
  7. mapper中的 大于 小于 等于 符号的 转义使用
  8. 图片怎么转换到Excel表格?偷偷安利一个好用的方法
  9. X1000代码烧写配置
  10. Android CPU架构之ARM和X86