一、介绍说明
主要特点:
  ①在前端压缩好要上传的图片可以更快的发送给后端,因此也特别适合在移动设备上使用。
  ②兼容IOS/Android,修复了IOS/Android某些版本已知的BUG。
  ③按需加载文件,仅需引入lrz.bundle.js文件,例如当检测是IOS7的用户,那么会自动异步再载入修复BUG的文件,而无需担心浪费宝贵的带宽开销。
  ④原生JS编写,不依赖例如jquery等第三方库。
二、如何获取
下载地址:

https://files.cnblogs.com/files/sunyuweb/lrz.bundle.js

<script src="./lrz.bundle.js"></script>
三、如何使用

方式1:图片用于用户上传

<script src="./lrz.all.bundle.js"></script>(博客暂时没有资源可以自行Google download)

这里加载的这个有个all,和上面地址的例子可能是不一样。因为这个all的js是比较全的兼容android和ios。

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

上传图片<input type="file" capture="camera" accept="image/*" name="logo" />
capture(捕获的意思)表示调用相册相机camera,录音机video和摄像机audio。
accept 表示直接打开系统文件目录。(其实html5的input:file标签还支持一个multiple属性,表示可以支持多选。加上这个multiple后,capture就没啥用了,因为multiple是专门用来支持多选的。)

input type="file" 添加了 accept="image/*"属性在Chrome和Safari等Webkit浏览器下却出现了响应滞慢的问题,使得页面弹出选择文件的弹窗非常的慢6-10s,这是因为accept="image/*"会每一个文件都遍历一次所有的”image/*”文件类型。

解决办法是:删掉它或者将 * 通配符,或者修改为指定的MIME类型

<input type="file" accept="image/gif,image/jpeg,image/jpg,image/png,image/svg">

$(function(){
  $('input[name=logo]').on('change', function(){
    lrz(this.files[0], {width: 640}) //width:640这个代表的是图片占得内存的大小,值越小,占内存越小
      .then(function (rst) {  //请求ajax把图片地址传过去
        $.ajax({
          url: site_url + 'api/user/updLogo',
          type: 'post',
          data: {img: rst.base64}, //rst.base64就是这个图片的地址 base64字符串
          dataType: 'json',
          timeout: 200000,
          error: doAjax.error,
          success: doAjax.success,
        });
      })
      .catch(function (err) {  //捕获错误,而且一旦出错上面的then都不会执行  })
      .always(function () {  //无论成败都会执行这里   });
  });
})

<input onchange="upload()" type="file" capture="camera" />
接着通过change事件可以得到用户选择的图片
function upload () {
  lrz(this.files[0])
    .then(function (rst) {  // 处理成功会执行  })
    .catch(function (err) {  // 处理失败会执行  })
    .always(function () {  // 不管是成功失败,都会执行  });
});

方式2:如果图片不是来自用户上传的,那么也可以直接传入图片路径
lrz('./xxx/xx/x.png')
  .then(function (rst) {  // 处理成功会执行  })
  .catch(function (err){  // 处理失败会执行  })
  .always(function () {  // 不管是成功失败,都会执行  });

四、后端处理
后端最终会收到前端发送的base64字符串,接着处理字符串为图片即可。
前端生成的结果中有一个base64Len,这是字符串的长度,后端应该核对以确认是否提交完整。
五、兼容性
IE9以上及大部分非IE浏览器(chrome、微信什么的)
六、FAQ
有疑问请直接在 issues 中提问 :see_no_evil:
Q:有时拍摄完照片后,页面自动刷新或闪退了。
A:虽然已作了优化处理,但内存似乎还是爆掉了,常见于低配android手机。

Q: 怎么批量上传图片?
A: 您可以自己写个循环来传入用户多选的图片,但在移动端上请勿这样做,原因同上。

Q: 直接传入图片路径的无法生成图片
A: 可能是跨域的问题,具体请看CORS_enabled_image

Q: 想要商用可以吗?
A: 没问题,但请留意issue里已知的问题。

关于前端本地压缩图片,兼容IOS/Android/PC且自动按需加载文件之lrz.bundle.js的更多相关文章

  1. 转:按需加载html 图片 css js

    按需加载是前端性能优化中的一项重要措施,按需加载是如何定义的呢?顾名思义,指的是当用户触发了动作时才加载对应的功能.触发的动作,是要看具体的业务场景而言,包括但不限于以下几个情况:鼠标点击.输入文字. ...

  2. LocalResizeIMG前端HTML5本地压缩图片上传,兼容移动设备IOS,android

    LocalResizeIMG前端HTML5本地压缩图片上传,兼容移动设备IOS,android jincon 发表于 2015-02-26 18:31:01 发表在: php开发 localresiz ...

  3. android Listview 软引用SoftReference异步加载图片

    首先说一下,android系统加载大量图片系统内存溢出的3中解决方法: (1)从网络或本地加载图片的时候,只加载缩略图.这个方法的确能够少占用不少内存,可是它的致命的缺点就是,因为加载的是缩略图,所以 ...

  4. EasyDSS高性能RTMP、HLS(m3u8)、HTTP-FLV、RTSP流媒体服务器前端重构(五)- webpack + vue-router 开发单页面前端实现按需加载

    为了让页面更快完成加载, 第一时间呈现给客户端, 也为了帮助客户端节省流量资源, 我们可以开启 vue-router 提供的按需加载功能, 让客户端打开页面时, 只自动加载必要的资源文件, 当客户端操 ...

  5. 携程Android App插件化和动态加载实践

    携程Android App的插件化和动态加载框架已上线半年,经历了初期的探索和持续的打磨优化,新框架和工程配置经受住了生产实践的考验.本文将详细介绍Android平台插件式开发和动态加载技术的原理和实 ...

  6. Android 插件化方案(动态加载)总结

    1.作用 大多数Android开发人员开始接触这个问题是因为 App 爆棚了,方法数超过了一个 Dex 最大方法数 65535 的上限,因而便有了插件化的概念,将一个 App 划分为多个插件(Apk ...

  7. IOS 开发下拉刷新和上拉加载更多

    IOS 开发下拉刷新和上拉加载更多 简介 1.常用的下拉刷新的实现方式 (1)UIRefreshControl (2)EGOTTableViewrefresh (3)AH3DPullRefresh ( ...

  8. Yii2按需加载图片怎么做?

    按需加载图片应该用 jQuery LazyLoad 图片延迟加载按需加载文件夹应该用 Yii::import

  9. jQuery:实现图片按需加载的方法,当要显示内容的高度超过了页面的高度,按需加载,根据滚动条的位置来判断页面显示的内容

    实现图片按需加载的方法,当要显示内容的高度超过了页面的高度,按需加载,根据滚动条的位置来判断页面显示的内容 这个类似于京东或淘宝页面,根绝页面的滚动,显示下面的内容 如下图所示,一开始并不是所有的图片 ...

随机推荐

  1. Ubuntu14.04安装配置星际译王词典

    参考自:http://m.blog.csdn.net/blog/u014731529/25917149 平常总会遇到一些不认识的单词,汉字等等.一直使用Chrome 浏览器的翻译插件,不过插件的翻译总 ...

  2. Install and run DB Query Analyzer 6.04 on Microsoft Windows 10

          Install and run DB Query Analyzer 6.04 on Microsoft Windows 10  DB Query Analyzer is presented ...

  3. Oracle Enterprise Linux 64-bit 下Oracle11g的监听配置修改及测试步骤

    测试环境:Oracle Enterprise Linux 64-bit (5.8版本) + Oracle 11g 64位 相关说明: Oracle11g64位软件的安装位置为/u01/app/orac ...

  4. Linux多线程实践(1) --线程理论

    线程概念 在一个程序里的一个执行路线就叫做线程(thread).更准确的定义是:线程是"一个进程内部的控制序列/指令序列"; 一切进程至少有一个执行线程; 进程  VS. 线程  ...

  5. 看uboot的时候发现随机数的另外一种算法

    #include <stdio.h> #include <time.h> static unsigned int y = 1U; unsigned int rand_r(uns ...

  6. (NO.00001)iOS游戏SpeedBoy Lite成形记(十三)

    游戏特效部分就先这样了,因为毕竟是Lite版本,而且是第一个App,所以咱们把主要精力放在游戏可玩逻辑上吧(虽然已经厚颜无耻的加了不少特效了). 说句题外话:游戏美工是独立开发者不可逾越的鸿沟,是无法 ...

  7. C 语言内存区域分配(进程的各个段)详解

    C语言可执行代码结构  名称 内容 代码段  可执行代码.字符串常量 数据段  已初始化全局变量.已初始化全局静态变量.局部静态变量.常量数据 BSS段  未初始化全局变量,未初始化全局静态变量 栈 ...

  8. Java进阶(十九)利用正则表达式批处理含链接内容文档

    利用正则表达式批处理含链接内容文档 由于项目需求,自己需要将带有链接的标签去除,例如 <a href="/zhaoyao/17-66.html">头晕</a> ...

  9. 操作系统 - unix和windows下进程异同

    在UNIX系统中,只有一个系统调用可以用来创建新进程:fork.这个系统调用会创建一个与调用进程相同的副本.在调用了fork之后,这两个进程(父进程和子进程)拥有相同的存储映像.同样的环境字符串和同样 ...

  10. Linux - crontab的创建以及注意事项

    [root@www ~]# crontab [-u username] [-l|-e|-r] 选项与参数: -u :只有 root 才能进行这个任务,亦即帮其他使用者创建/移除 crontab 工作排 ...