试用场景:上传图片过大,需进行压缩处理。

涉及微信API

API 说明 文档
chooseImage 选择图片 https://developers.weixin.qq.com/miniprogram/dev/api/media/image/wx.chooseImage.html
createCanvasContext 创建canvas画布 https://developers.weixin.qq.com/miniprogram/dev/api/canvas/wx.createCanvasContext.html
getImageInfo 获取图片信息 https://developers.weixin.qq.com/miniprogram/dev/api/media/image/wx.getImageInfo.html
CanvasContext.drawImage() 绘制图像到画布 https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.drawImage.html
CanvasContext.draw() 绘制是否跟着上次绘制,即是否清空画板 https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.draw.html
canvasToTempFilePath 把当前画布导出指定大小的图片,即压缩图片 https://developers.weixin.qq.com/miniprogram/dev/api/canvas/wx.canvasToTempFilePath.html

wxml

    <!--不显示画板且正常获取生成的压缩图片-->
<canvas
style="width: {{canWidth}}px;height: {{canHeight}}px;visibility:hidden;z-index: -1px"
canvas-id="attendCanvasId"
class="pa tp-0 lf-0"/>
<view
bindtap='create'
style="background-color: {{themeColor}}"
class="dib pl-30 pr-30 ht-80 lh-80 bdr-100 white wi-100 tc fs-32">
上传图片
</view>

js

    data: {
// 接收选中的图片列表
files: [],
// 接收压缩后的图片
compressFiles: [],
// 预设画布宽高
canvasWidth: 0,
canvasHeight: 0
},
// 选择图片
chooseImage: function () {
var that = this;
wx.chooseImage({
count: 6, // 设置允许选择的图片个数
sizeType: ['compressed'], // 压缩图
sourceType: ['album', 'camera'], // 可以指定来源是相册还是相机,默认二者都有
success: function (res) {
// 返回选定照片的本地文件路径列表,tempFilePath可以作为img标签的src属性显示图片
that.setData({
files: that.data.files.concat(res.tempFilePaths)
})
}
})
},
// 绘图
drawCanvas: function () {
this.setData({
compressFiles: []
}, () => {
const ctx = wx.createCanvasContext('attendCanvasId')
let that = this
for (let i in this.data.files) {
let item = this.data.files[i]
wx.getImageInfo({
src: item,
success: function (res) {
if (res.width > 275 || res.height > 172) { // 判断图片超过一定像素侯进行压缩
// 获取原图比例
let scale = res.width / res.height
that.setData({
canvasWidth: 275,
canvasHeight: 275 / scale
})
// 画出压缩图片
ctx.drawImage(that.data.files, 0, 0, that.data.canvasWidth, that.data.canvasHeight)
ctx.draw()
// 等待压缩图片生成
that.prodImageOpt()
}
}
})
}
})
},
// 压缩图片
prodImageOpt: function () {
let that = this
wx.canvasToTempFilePath({
canvasId: 'attendCanvasId', // 画布id
fileType: 'jpg', // 压缩图片的格式
quality: 1, // 压缩图片的质量,进‘jpg’格式可用
success: function (res) {
let arr = that.data.compressFiles
arr.push(res.tempFilePath)
that.setData({
compressFiles: arr
})
// 查看文件压缩后的信息
// wx.getImageInfo({
// src: res.tempFilePath,
// success: function (res) {
// console.log(res)
// }
// })
}
})
},
// 上传图片
create: function () {
let arr = this.drawCanvas() // 提交表单时绘制画布并进行压缩
setTimeout(() => {
// 获取压缩后的图片路径
console.log(this.data.compressFiles)
}, 300)
// 请求函数
...
...
...
}

微信小程序文件压缩上传的更多相关文章

  1. 微信小程序 --- 文件的上传和下载

    文件上传 / 文件下载 : wx.uploadFile

  2. 微信小程序多张图片上传

    微信小程序上传图片每次只能上传一张,所有很多朋友就会问想要多张图片上传怎么办? 首先,我们来看一看wx.chooseImage(object)和wx.uploadFile(OBJECT)这两个个api ...

  3. [转]微信小程序实现图片上传功能

    本文转自:http://blog.csdn.net/feter1992/article/details/77877659 前端: 微信开发者工具 后端:.Net 服务器:阿里云 这里介绍微信小程序如何 ...

  4. nodeJs实现微信小程序的图片上传

    今天我来介绍一下nodejs如何实现保存微信小程序传过来的图片及其返回 首先wx.uploadFile绝大部分时候是配合wx.chooseImage一起出现的,毕竟选择好了图片,再统一上传是实现用户图 ...

  5. 微信小程序实现图片上传功能

    前端: 微信开发者工具 后端:.Net 服务器:阿里云 这里介绍微信小程序如何实现上传图片到自己的服务器上 前端代码 data: { productInfo: {} }, //添加Banner bin ...

  6. 微信小程序--实现图片上传

    前端: 微信开发者工具 后端:.Net 服务器:阿里云 这里介绍微信小程序如何实现上传图片到自己的服务器上 前端代码 data: { productInfo: {} }, //添加Banner bin ...

  7. 微信小程序中图片上传阿里云Oss

    本人今年6月份毕业,最近刚在上海一家小公司实习,做微信小程序开发.最近工作遇到一个小问题. 微信小程序图片上传阿里云服务器Oss也折腾了蛮久才解决的,所以特意去记录一下. 第一步:配置阿里云地址: 我 ...

  8. [组件封装]微信小程序-图片批量上传照片墙

    描述 批量上传图片, 可设置最大上传个数, 可删除, 可设置默认值. 效果 源码 pictures-wall.wxml <view class="picturesWall"& ...

  9. 微信小程序wx.uploadFile 上传文件 的两个坑

    fileUpload: function (tempFilePath) { var that = this;//坑1: this需要这么处理 wx.uploadFile({ url: url地址, / ...

随机推荐

  1. Go微服务容错与韧性(Service Resilience)

    Service Resilience是指当服务的的运行环境出现了问题,例如网络故障或服务过载或某些微服务宕机的情况下,程序仍能够提供部分或大部分服务,这时我们就说服务的韧性很强.它是微服务中很重要的一 ...

  2. Python中的MRO(方法解析顺序)[转载]

    本文转载至: http://hanjianwei.com/2013/07/25/python-mro/ 对于支持继承的编程语言来说,其方法(属性)可能定义在当前类,也可能来自于基类,所以在方法调用时就 ...

  3. flexible.js分析--JavaScript

    //立即执行函数 (function flexible(window, document) { // 获取的html 的根元素 var docEl = document.documentElement ...

  4. win10安装python

    下载地址:https://www.python.org/downloads/release/python-365/ 安装完成后,在cmd里输入  python ,检查是否安装成功

  5. 整理一些大厂的开源平台及github,向他们看齐...

    有人苦恼,该如何突破技术的局限性... 有人羡慕,技术上你怎么懂得这么多... 有人哀叹,唉,我已经学不动了... 我的总结(纯属个人想法):身处IT,就得不断学习和积累,才不会被狠狠地甩在身后.什么 ...

  6. vs2019下载和更新速度非常慢的解决方案

    纵观全网,就两种解决方案 1.取消网络适配器里面的IPV6的给勾选[我试过,无效,但是有些网友说是有效果,也不知道是咋回事] 2.修改host.[本人亲测有效果,速度从5kb到5M左右,但是无法跑满宽 ...

  7. .Net Core上传文件到服务器

    /// <summary> /// 上传文件 /// </summary> /// <returns></returns> [HttpPost(&quo ...

  8. Java类和对象动手动脑

    动手动脑1 以下代码为何无法通过编译?哪儿出错了?

  9. Mac安装Command Line Tools

    从App Store上下载的Xcode,默认是不会安装Command Line Tools的,Command Line Tools是在Xcode中的一款工具,可以在命令行中运行C程序. 在终端中输入命 ...

  10. tesseract 测试样例

    该图片的链接为https://raw.githubusercontent.com/Python3WebSpider/TestTess/master/image.png,可以直接保存或下载. 首先用命令 ...