一、介绍说明
主要特点:
  ①在前端压缩好要上传的图片可以更快的发送给后端,因此也特别适合在移动设备上使用。
  ②兼容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. UNIX环境高级编程——信号之kill、raise、killpg、alarm、pause、abort、sleep、usleep、nanosleep和setitimer函数

    一.kill, raise, killpg 函数 int kill(pid_t pid, int sig); int raise(int sig); int killpg(int pgrp, int ...

  2. 汉字转拼音的Oracle函数

    前言: 最近处理一个特殊的问题,需要用到汉字自动转换拼音的功能. 解决: 在这里找了不少资料,都是有所缺陷,而且也好像很绕.其实是一个很简单的东东.后来还是自己写了一个函数获取.分享出来,给有需要的X ...

  3. android异步任务asyntask详解

    在Android中实现异步任务机制有两种方式,Handler和AsyncTask. Handler模式需要为每一个任务创建一个新的线程,任务完成后通过Handler实例向UI线程发送消息,完成界面的更 ...

  4. 8、Preferences

    (官网:www.libgdx.cn) Preferences是保存简单数据的一种很好的方式,比如用户设置,游戏状态等.Preferences原理像hash map,使用字符串作为键值,多种类型作为值. ...

  5. Linux 学习笔记_12_文件共享服务_3_NFS网络文件服务

    NFS网络文件服务 NFS---- Network File System 用于UNIX/Linux[UNIX类操作系统]系统间通过网络进行文件共享,用户可以把网络中NFS服务器提供的共享目录挂载到本 ...

  6. H5学习之旅-H5列表(8)

    列表的基本语法 ol:有序列表 ul:无序列表 li:列表项 dl:列表 dt:列表项 dd:列表描述 常用列表 1.无序列表:使用标签 ul,li 属性:disc(默认实心圆) circle (空心 ...

  7. C#之结尾篇

    在Top10语言中,C#是最优美的语言,没有之一,在Top10语言中,C#所可用的标准库及可获得其他库是最强大的之一,这个必须带上之一,因为有java在,在Top语言中,C#语言是性能最高的语言之一, ...

  8. .bash_profile和.bashrc的什么区别及启动过程

    /etc/profile:此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行.并从/etc/profile.d目录的配置文件中搜集shell的设置./etc/bashrc:为每一个运 ...

  9. Linux下的tree命令 --Linux下目录树查看

    Linux下的tree命令 --Linux下目录树查看 有时我们需要生成目录树结构,可以使用的有ls -R,但是实际效果并不好 这时需要用到tree命令,但是大部分Linux系统是默认不安装该命令的, ...

  10. 手持机设备公司(WINCE/ANDROID/LINUX)

    1.深圳扬创科技有限公司网址: http://www.yctek.com/ 2.无锡盈达聚力科技有限公司 点击打开链接 3.上海鲲博通信技术有限公司(主要为用WINCE开发导航产品) 点击打开链接 4 ...