原文链接:http://blog.csdn.net/iefreer/article/details/53039848

手机用户拍的照片通常会有2M以上,这对服务器带宽产生较大压力。

因此在某些应用下(对图片要求不那么高)我们可以在客户端来压缩图片,然后再提交给服务器。

总体思路是:

1. 使用HTML5的FileReader接口来读取用户上传的图片

2. 使用canvas drawImage接口绘制到Canvas 2d中

3. 使用canvas toDataUrl接口把图片转成base64编码字符串(这里可以降低图片质量)

4. 完成image src的替换后,表单提交时,就提交新的被压缩过的图像

这里不重复贴代码,直接看在线演示:http://wow.techbrood.com/fiddle/30625

该方案支持IE10+, FF, Chrome, Safari等现代浏览器。

有两点需要注意:

1. 注意在FF下,类似这样的处理方案必须确保canvas绘制和toDataUrl的处理是同步进行的,

也就是不能是异步处理的,否则可能会出现其他事件触发页面组合(Composite)而导致canvas缓存被清空的情况,那样toDataUrl出来的会是空白字符串。

2. 需要等image加载完成再做draw和转换的动作,否则一些浏览器会有问题。

最新文章

  1. 经典网页设计:20个华丽的 iPhone 应用程序演示网站
  2. 跳转页面&回到上一页
  3. Android 在资源文件(res/strings.xml)定义一维数组,间接定义二维数组
  4. std的find和reverse_iterator联合使用
  5. C++ Template Operator
  6. linux poll
  7. BIND9配置文件详解模板[转载]
  8. POJ 1577 Falling Leaves
  9. HTML系列(三):文字设置
  10. Spring Boot 系列(二)单元测试&网络请求
  11. 获得当前EIP的值
  12. JVM 垃圾回收机制
  13. Ajax入门例子
  14. go微服务框架go-micro深度学习(四) rpc方法调用过程详解
  15. Kattis之旅——Number Sets
  16. 日记整理---->2016-11-26
  17. CodeForces - 620C Pearls in a Row 贪心 STL
  18. C# 读Autofac源码笔记(1)
  19. 【转】XDocument简单入门
  20. 关于IE6的一些总结

热门文章

  1. vbox丢失*MultiArch_amd64.msi或者*MultiArch_x86.msi重新制作
  2. 使用Grunt 插件打包Electron Windows应用
  3. 每天一个 Linux 命令(17):whereis 命令
  4. No.7__C#_Final
  5. Java值传递以及引用的传递、数组的传递!!
  6. WINDOWS Server2008上部署Oracle10g及oracle SQL语法小记
  7. 两系统用asp.net forms 身份验证方式实现跨域登录信息共享
  8. HTML解析原理
  9. JS数组转成json字符串的注意事项
  10. C# 利用反射给不同类型对象同名属性赋值