惯例,先贴传送门:https://github.com/think2011/localResizeIMG

首先说到,为嘛要压缩图片,这需求一般出现在需要上传照片(尤其是移动端)的情况下,现在手机拍出来的照片随随便便就是好几兆,无论3/4G还WIFI要上传都很吃力,而且实际上也用不着这么大呀,一般压缩到个一百几十k就够用了。因此,我们需要在用户选好照片(可能是从相册中选择也可能是直接拍摄,看我博客的另一篇文章:html5 api:device's media capture mechanism(设备的媒体捕捉机制)——利用input:file调用设备的照相机/相册、摄像机、录音机)后,先用js把照片压缩好了,再上传到服务器进行进一步的处理。

js图片压缩的原理大同小异,这里直接引用localResizeIMG官方文档的原话:

基本原理是通过canvas渲染图片,再通过 toDataURL 方法压缩保存为base64字符串(能够编译为jpg格式的图片)。

这个过程我自己手撸过,代码很多,更不用提有各种的兼容性坑,所以最后权衡再三还是直接换成了这个插件。
这插件用起来很简单(废话,用起来不简单还用来干嘛),传入照片(可以是file对象也可以直接传图片路径),设置好自己想要的分辨率(其实也就是width不超过多少px、heighti不超过多少px),然后再设置个图片质量,然后就是promise风格的callback了,直接把压缩后照片的base64传进callback里做参数,最后就是拿着这base64爱干嘛干嘛去。另外,作者还很贴心的把照片base64编码的长度也传参进来了,方便后端校验图片是否上传完整。
具体用法就不贴了,自己传送门去看呗,这里放个示例:

<input onchange="upload().bind(this)" type="file" accept="image/*" />
function upload () {
lrz(this.files[0])
.then(function (rst) {
// 处理成功会执行
})
.catch(function (err) {
// 处理失败会执行
})
.always(function () {
// 不管是成功失败,都会执行
});
});

最新文章

  1. iOS经典面试题总结--内存管理
  2. web学习之开发环境的搭建
  3. linq 实现动态 orderby
  4. JavaScript中Eval()函数的作用
  5. uva 11572 unique snowflakes——yhx
  6. svn自动更新
  7. IREP_SOA Integration程序注释语法Annotations(概念)
  8. python包管理工具
  9. [Hadoop] - TaskTracker源码分析
  10. Android Static分析
  11. SLAM+语音机器人DIY系列:(三)感知与大脑——1.ydlidar-x4激光雷达
  12. Android模拟器Genymotion使用
  13. ubuntu16.04英文版搜狗输入法安装报错
  14. mongodb异常恢复
  15. Java学习07 (第一遍) - Spring MVC
  16. docker-compose管理daocker
  17. Razor:从aspx到cshtml常见错误及正确书写方法
  18. Tensorflow学习:(二)搭建神经网络
  19. 【bbs】login.php
  20. Linux文本处理

热门文章

  1. 任意文件夹打开CMD命令窗口
  2. MyBatis 使用(XML版本)
  3. 数字逻辑实践6-&gt; 从数字逻辑到计算机组成 | 逻辑元件总结与注意事项
  4. (六)React Ant Design Pro + .Net5 WebApi:后端环境搭建-EF Core
  5. Java入土--Java基础(二)
  6. LGP3426题解
  7. 基于pytorch实现Resnet对本地数据集的训练
  8. 在数据结构与算法中 传值方式(C语言)
  9. 关于Stream系列实战
  10. Ubuntu20安装nodejs和npm并切换阿里源