微信小程序上传图片压缩方案

小程序上传图片需要进行压缩,可以使用wx.getFileSystemManager()方法将图片转换成base64格式,再使用canvas将图片压缩成指定大小。


//选择图片

wx.chooseImage({

    count:  1,  //最多选择1张图片

    success:  function(res)  {

        var  tempFilePaths  =  res.tempFilePaths;  //获取图片本地路径

        //将图片转换成base64格式

        wx.getFileSystemManager().readFile({

            filePath:  tempFilePaths[0],

            encoding:  'base64',

            success:  function(data)  {

                //创建canvas进行压缩

                var  imgData  =  'data:image/png;base64,'  +  data.data;

                var  image  =  new  Image();

                image.src  =  imgData;

                image.onload  =  function()  {

                    //压缩图片,并绘制到canvas上

                    var  canvas  =  document.createElement('canvas');

                    var  context  =  canvas.getContext('2d');

                    var  originWidth  =  this.width;

                    var  originHeight  =  this.height;

                    var  maxWidth  =  1280,  //设置最大的宽度

                            maxHeight  =  1280,  //设置最大的高度

                            targetWidth  =  originWidth,

                            targetHeight  =  originHeight;

                    if  (originWidth  >  maxWidth  ||  originHeight  >  maxHeight)  {

                        if  (originWidth  /  originHeight  >  maxWidth  /  maxHeight)  {

                            targetWidth  =  maxWidth;

                            targetHeight  =  Math.round(maxWidth  *  (originHeight  /  originWidth));

                        }  else  {

                            targetHeight  =  maxHeight;

                            targetWidth  =  Math.round(maxHeight  *  (originWidth  /  originHeight));

                        }

                    }

                    canvas.width  =  targetWidth;

                    canvas.height  =  targetHeight;

                    context.clearRect(0,  0,  targetWidth,  targetHeight);

                    context.drawImage(image,  0,  0,  targetWidth,  targetHeight);

                    //将canvas转换成图片base64格式

                    var  imageData  =  canvas.toDataURL('image/png');

                    var  base64Data  =  imageData.replace(/^data:image\/\w+;base64,/,  "");

                    //调用接口上传图片

                    wx.uploadFile({

                        url:  '接口地址',

                        filePath:  tempFilePaths[0],

                        name:  'file',

                        formData:  {

                            'content':  base64Data

                        },

                        success:  function(res)  {

                            //上传成功

                        },

                        fail:  function()  {

                            //上传失败

                        }

                    })

                }

            }

        })

    }

})

首先使用wx.chooseImage()方法选择了一张图片,然后使用wx.getFileSystemManager()方法将图片转换成base64格式。接着使用canvas进行压缩,并将canvas转换成图片base64格式,最后调用接口上传图片。在压缩过程中,设置了最大宽度和高度为1280,可以根据实际需求进行调整