美文网首页
小程序, 图片压缩上传

小程序, 图片压缩上传

作者: wangwing | 来源:发表于2019-03-13 10:40 被阅读0次

问题: 图片上传后保存的图片跟原图不一致,还要待研究

//选择图片

  chooseImg(e) {

    let that = this;

    let imgs = this.data.imgs;

    let imgsHidden = this.data.imgsHidden;

    const token = wx.getStorageSync("jwt");

    wx.request({

      url: app.globalData.baseUrl + '/api/oss/frontend_sts_token',

      method: 'get',

      header: {

        'content-type': 'application/json',

        'Authorization': "Bearer " + token

      },

      success: res => {

        wx.chooseImage({

          count: 24, // 默认最多一次选择9张图

          sizeType: ['compressed'], // 可以指定是原图还是压缩图,默认二者都有

          sourceType: ['album', 'camera'], // 可以指定来源是相册还是相机,默认二者都有

          success: function (res1) {

            let tempFilePaths = res1.tempFilePaths;

            that.setData({

              sts_token_data: res.data.data

            })

            uploadImage({

              filePath: tempFilePaths,

              sts_token_data: that.data.sts_token_data,

              success: function (res) {

                imgs.push(app.globalData.imgUrl + res);

                imgsHidden.push(res);

                that.setData({

                  imgs,

                  imgsHidden

                });

                console.log(that.data)

                wx.hideLoading();

              },

              fail: function (res) {

                console.log("上传失败");

                wx.hideLoading();

              }

            });

            // that.getCanvasImg(0, 0, tempFilePaths);           

          },

        })

      }

    })

  },

  //压缩并获取图片,这里用了递归的方法来解决canvas的draw方法延时的问题

  getCanvasImg: function (index, failNum, tempFilePaths) {

    let that = this;

    let imgs = this.data.imgs;

    let imgsHidden = this.data.imgsHidden;

    // let imgsTemp = that.data.imgsTemp;

    if (index < tempFilePaths.length) {

      const ctx = wx.createCanvasContext('attendCanvasId');

      wx.getImageInfo({

        src: tempFilePaths[index],

        success(res) {

          let width = that.data.windowWidth / 750 * 500;

          let height = res.height * width / res.width;

          that.setData({

            canvasW: width * 2, //宽度两倍

            canvasH: height * 2 //高度两倍

          })

          ctx.drawImage(tempFilePaths[index], 0, 0, width, height);

          // ctx.drawImage(tempFilePaths, 0, 0, width, height);

          ctx.draw(true, function () {

            index = index + 1;//上传成功的数量,上传成功则加1

            wx.canvasToTempFilePath({

              canvasId: 'attendCanvasId',

              success: function success(res) {

                console.log(res)

                console.log("success")

                // imgsTemp.push(res)

                // that.setData({

                //  imgsTemp

                // });

                uploadImage({

                  filePath: [res.tempFilePath],

                  sts_token_data: that.data.sts_token_data,

                  success: function (res) {

                    imgs.push(app.globalData.imgUrl + res);

                    imgsHidden.push(res);

                    that.setData({

                      imgs,

                      imgsHidden

                    });

                    console.log(that.data)

                    wx.hideLoading();

                  },

                  fail: function (res) {

                    console.log("上传失败");

                    wx.hideLoading();

                  }

                });

                setTimeout(()=>{

                  that.getCanvasImg(index, failNum, tempFilePaths);

                },800)

              }, fail: function (e) {

                console.log("fail")

                failNum += 1;//失败数量,可以用来提示用户

                setTimeout(() => {

                  that.getCanvasImg(index, failNum, tempFilePaths);

                }, 1000)

              }

            });

          });

        }

      })

    }

  },

参考: https://www.jb51.net/article/143226.htm

相关文章

  • 小程序, 图片压缩上传

    问题: 图片上传后保存的图片跟原图不一致,还要待研究 //选择图片 chooseImg(e) { let t...

  • 微信小程序--图片相关问题合辑

    图片上传相关文章 微信小程序多张图片上传功能 微信小程序开发(二)图片上传 微信小程序上传一或多张图片 微信小程序...

  • html base64图片压缩

    个人用于微信小程序中html的图片压缩展示与上传 export function dealImage(base64...

  • iOS 网络上传图片

    上传图片 构造参数(NSArray *)files 上传图片—压缩 压缩到小于(...

  • iPic for Mac(图床神器) v1.7.0中文免费版

    上传图片相关设置 上传前压缩图片 可以在 iPic 的 偏好设置 中开启「上传前压缩图片」选项,目前支持压缩的图片...

  • uniapp小程序图片前端压缩上传

    1,前言 这次项目中做了一个图片上传,要求是大于2MB的就压缩成2MB一下的再上传,我这边利用了uniapp的文件...

  • Vue上传图片压缩的问题

    上传图片太大,需要前台进行图片压缩上传图片大于100* 1024 的用canvas 来压缩来解决然后IOS拍照上传...

  • 图片压缩上传

    参考1-HTML5实现图片压缩上传功能参考2-移动前端—图片压缩上传实践参考3-移动端H5图片压缩上传 大体步骤 ...

  • 微信小程序上传图片压缩

    上传图片时图片过大,接口请求速度会很慢,利用canvas对图片进行压缩 wxml文件: js文件:

  • 前端学习之路——图片上传压缩

    废话不多少,直接上代码! 压缩图片函数 调用函数 图片上传与压缩 图片上传与压缩就是这么简单,欢迎大家点评指导。

网友评论

      本文标题:小程序, 图片压缩上传

      本文链接:https://www.haomeiwen.com/subject/qhxgyqtx.html