Vue.js移动端图片压缩---localResizeIMG

今天工作,做到图片上传的,后端说让我压缩了之后再发送请求,好吧,之前都没有做过压缩,这是又要让我get一种技能的节奏,于是百度找了一圈,发现一个应该是可以用的---localResizeIMG

遗憾的是,看到了笔着这样的说明:

 

 本来想换一个,可是看到这个评价还可以,于是就决定用这个了

根据他的说明,先获取

npm i lrz

例子1:

<input type="file"  accept="image/*" @change="compressImg" capture="camera" />  
accept是为了规定通过文件上传来提交的文件的类型,capture是webApp中捕获到系统默认的设备,camera--照相机;camcorder--摄像机;microphone--录音。

使用函数:

compressImg(e){
    if (e.target.files){
      // lrz(file,[ options ])
      lrz( e.target.files[0], [ options ] )  
            .then(function(rst) {
                //成功时执行
            }).catch(function(error) {
                //失败时执行
            }).always(function() {
                //不管成功或失败,都会执行
            })
    };
}

[options]可以有下面几个属性:

属性 值类型 属性说明
width number 图片最大的宽度,默认为原图的宽度
height number 图片最大的高度,默认为原图的高度
quality number 图片压缩质量,取值0-1,默认为0.7
filedName string 后端接收的字段名,默认为 ‘file’

成功回调:

rst.formData; //后端可处理的数据;

rst.file; //压缩后的file对象(默认应丢在rst.formData里面),需要注意的是:如果压缩率太大的话,这个会是原始的file对象;

rst.fileLen; //生成后的图片大小,后端可通过此值来校验是否传输完整;

rst.base64; //生成后的图片base64,后端可以处理此字符串为图片,也直接用于img.src = base64;

rst.base64Len; //生成后的base64的大小,后端可以通过此值来校验是否传输完整 (如果采用base64上传方式);

rst.origin; //也就是原始的file对象,里面存了一些原始文件的信息,例如大小,日期等;

由于我是用插件写的,所以不用清空,如果需要的话,可以在always中调用

e.target.value = null; //清空上传value的值

具体参数即使用可以看相关文档:https://github.com/think2011/localResizeIMG/wiki/2.-%E5%8F%82%E6%95%B0%E6%96%87%E6%A1%A3

 

方式2:

如果图片不是来自用户上传的,也可以直接传路径:

lrz('./xxx/xx/x.png')
        .then(function (rst) {
            // 处理成功会执行
        })
        .catch(function (err){
            // 处理失败会执行
        })
        .always(function () {
            // 不管是成功失败,都会执行
        });

 

 

 

具体可以看他的git上面的说明:https://github.com/think2011/localResizeIMG

posted @ 2019-12-13 15:53  超哥20  阅读(994)  评论(0编辑  收藏  举报