lrz实现原理_移动端图片压缩上传

[2017年文章]

前提更要:

1、压缩图片的几种方式:php、js

2、对移动端手机上传的图片进行压缩,lrz的原理和使用方法

3、对HHuploadify升级,lrz使其能够对图片进行压缩

本地客户端压缩图片js

1、作用

前端本地客户端压缩图片,兼容IOS,Android,PC:

2、原理:

canvas渲染图片,再通过 toDataURL 方法压缩保存为base64字符串

2.1 用户使用input file上传图片的时候,用filereader读取用户上传的图片数据(base64格式)

2.2 收到传入的文件后,创建一个 canvas 对象 和 blob 对象(其实也就是对应的文件引用,所以能被 img src直接引用)

2.3 创建 img 对象,标记允许跨域处理,src 设置为 blob,接下来就是开始压缩了。

2.4 开始压缩,获取图片旋转的方向,计算用户设置的尺寸,设置canvas

2.5 尽可能释放内存

2.6 获取到压缩后的base64格式图片数据,转成二进制塞入formdata,再通过XmlHttpRequest提交formdata

3、后端处理:

采用标准的文件上传方式,而且这种方式传输量也会小一些

前端发送rst.formData给后端

后端接收 rst.file(可配置)字段,接着按常规处理

4、使用:

方法一、

//如果您的图片来自用户拍摄或者上传的,您需要一个input file来获取图片。

document.querySelector('#file').addEventListener('change', function () {

lrz(this.files[0])

.then(function (rst) {

// 处理成功会执行

console.log(rst);

})

.catch(function (err) {

// 处理失败会执行

})

.always(function () {

// 不管是成功失败,都会执行

});

});

方式二:

//如果您的图片不是来自用户上传的,那么也可以直接传入图片路径。

lrz('./xxx/xx/x.png')

.then(function (rst) {

// 处理成功会执行

})

.catch(function (err){

// 处理失败会执行

})

.always(function () {

// 不管是成功失败,都会执行

});

lrz(file, [options]);

file 通过 input:file 得到的文件,或者直接传入图片路径

[options] 这个参数允许忽略

width {Number} : 图片最大不超过的宽度,默认为原图宽度,高度不设时会适应宽度。

height {Number} 同上

quality {Number} 图片压缩质量,取值 0 - 1,默认为0.7

fieldName {String} 后端接收的字段名,默认:file

then(rst)返回结果是一个promise对象

rst.formData 后端可处理的数据

rst.file 压缩后的file对象(默认已经丢在rst.formData有一份了),需要注意的是如果压缩率太低的话,这个会是原始的file对象

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

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

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

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

catch(err)

万一出错了,这里可以捕捉到错误信息,而且以上的then都不会执行

always()

不管是成功失败,这里都会执行

在移动端图片上传的时候,用户传的都是手机本地图片,而本地图片一般都相对比较大(2-4M),如果用户用的是移动流量,完全把图片上传显然不是一个好办法。

HHuploadify 升级

$('.upload').each(function(idx){

$(this).HHuploadify({

auto:true,

isSingle:false,

fileSizeLimit:10240,

islrz:true,//是否使用图片压缩

imgwith:800//图片最大不超过的宽度,默认为原图宽度,高度不设时会适应宽度。

imgheight:null,//同上

imgquality:0.7,//图片压缩质量,取值 0 - 1,默认为0.7

uploader:'//api.shop.ci123.com/upload/pic/',

onUploadSuccess: function(file,data) {

data = eval('('+data+')');

$("input[name='orignal_"+(idx+1)+"']").val(data.url);

}

});

});

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值