微信小程序压缩图片及上传至云存储

时间:2024-10-22 10:34:02

微信小程序压缩图片及上传至云存储

目的:

将选择的任意图片压缩,给定压缩后的图片高度宽度最大值并保证同比例压缩,最后上传至微信云存储。

思路:

1 使用函数

       此函数只对jpg图片有效,其他图片格式不行;

2 使用canvas组件,先将图片绘制到canvas中:调用和函数,然后利用将canvas的内容输出。

注意点:canvas是设备相关的,需要获取设备的像素比来最终确定图片的大小。

具体步骤:

1 在wxml中添加canvas元素

<canvas style=”width:{{canvasWidth}}px;height:{{canvasHeight}}px” canvas-id=”canvas-id”></canvas>

canvasWidth,canvasHeight分别是canvas的宽度和高度,这两个变量放在页面的data中,因为需要根据所选的图片大小来改变,也方便压缩后隐藏(设置为0),canvas的ID是必须的,后面要用到。

2 在wxss文件中设置样式

.canvas-id{position:absolute;left:-99999px}

3 js中实现具体的实现

    //压缩时高度和宽度的最大值

    var _maxWidth = 280;

    var _maxHeight = 180;

    //图片压缩后的大小

    var _targetWidth = 0,_targetHeight = 0;

    //获取设备像素比:一个设备像素对应多少个图片像素

var _pixelRatio = ().pixelRatio;

//  选择图片

({

      count: 1, //只选择一个图片文件

      success:(res)=>{

        var _imageFile = [0];//获取文件路径

        //获取文件信息:主要是高度和宽度,然后计算压缩后的图片高度和宽度

//这里设置最大高度和宽度,并且同比例压缩

({

          src: [0],

          success:(imageInfoRes)=>{

            //计算压缩后的图片大小

            if ( /  > _maxHeight / _maxWidth){          

              _targetWidth  = _maxHeight *  / /_pixelRatio;

              _targetHeight = _maxHeight/_pixelRatio;

            }

            else{

              _targetWidth  = _maxWidth/_pixelRatio;

              _targetHeight = _maxWidth *  / /_pixelRatio;

            }

            //更新画布大小(这个肯定是需要的)

            ({

              canvasWidth:_targetWidth,

              canvasHeight:_targetHeight

            });

            //就是WXML里面canvas的ID

            var _canvasID = 'canvas-id';

            let ctx = (_canvasID);

            (0, 0, _targetWidth, _targetHeight);

            (_imageFile, 0, 0, _targetWidth, _targetHeight);

  

             //为了保证存储成功,需要将存储图片的代码放到draw的回调函数中

 (false,()=>{

              ({

                fileType:'png', //图片格式,可以用其他格式

                canvasId: _canvasID,

                success:(saveRes)=>{

                 //将压缩后的图片上传到云存储,云存储中已经有一个images的文件夹,至于如何开通云存储可以自己查下,很简单

                  ({

                    cloudPath:”images/" + (new Date()).valueOf() + ".png",

                    filePath:,

                    success:(uploadFileRes)=>{

                    }

                  });

 

                  //更新画布大小,设置为0,免得显示出来

                  ({

                    canvasWidth:0,

                    canvasHeight:0

                  });

                }

              })

            });

          }

        })

      },

      fail:console.error

    })