原文链接: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和转换的动作,否则一些浏览器会有问题。

js上传压缩图片的更多相关文章

  1. javascript异步上传压缩图片并立即显示图片

    javascript异步上传压缩图片并立即显示图片<pre><!doctype html><html><head><meta charset=&q ...

  2. H5上传压缩图片

    看这个,比较全的 https://github.com/mhbseal/html5ImgCompress ,几乎所有痛点都解决了! PC上传图片 基本结构 form[enctype="mul ...

  3. js上传本地图片遇到的问题

    1.改变页面文件上传默认的样式 <input type="text" size="20" id="upfile" style=&quo ...

  4. 通过FileWatcher,监听通过web上传的图片,并进行压缩

    需求是这样的,通过web传输过来的图片,无论是JS上传,还是其他的上传方式,都需要生成2张缩略图,分别是用于商品列表的小图small,和用于分享的小图share.基于不同上传方式的不同需求,使用exe ...

  5. PHP 多图上传,图片批量上传插件,webuploader.js,百度文件上传插件

    PHP  多图上传,图片批量上传插件,webuploader.js,百度文件上传插件(案例教程) WebUploader作用:http://fex.baidu.com/webuploader/gett ...

  6. vue移动端图片上传压缩

    上传压缩方法 import {api} from '../../api/api.js'; import axios from 'axios'; export function imgPreview ( ...

  7. js 显示刚刚上传的图片 (onchange事件)

    <table> <tr width="100"> <td>上传商场图片:</td> <td> <input typ ...

  8. ext js/Ext.Net_演示 htmleditor 上传&插入图片

    本文内容 解决方案结构 HtmlEditor_Upload.js 脚本 HtmlEditorUploadImg.ashx 上传图片到服务器 演示 htmleditor 控件添加插入图片功能   解决方 ...

  9. js如何展示上传的图片

    前言:本文章主要讲的是上传的图片如何展示在页面上. 一般来说,我们会先将本地图片上传到服务器,上传成功后,由后台返回图片的网络地址再在前端显示.但是,我今天讲的是不通过前面说的过程,而是直接使用js将 ...

随机推荐

  1. PLSQL Developer图形化窗口创建数据库全过程

    1.用系统管理员登陆,我这里用户名是system,密码是manager2.首先建立表空间(tablespaces),点击file->new->sql window   create tab ...

  2. css不常用重要属性

    超出省略号:display:block;white-space:norwrap;overflow:hidden;text-overflow:ellipsis; white-space:norwrap/ ...

  3. Ejabberd 插件开发 --- IQ截获与处理

    ejabberd的组件开发其实是非常简单的,只要遵循其gen_mod规范,添加iq处理函数就可以了.下面一步步教大家如何开发ejabberd组件. 首先,最好是自己编译ejabberd源码,这样的话把 ...

  4. C程序与Lua脚本相互调用

    Lua脚本是一种可用于C程序开发/测试的工具,本篇介绍一下C程序与Lua脚本如何进行相互调用,更加详细的操作参见<Programing in Lua>.本文分为3个部分:1.Windows ...

  5. php utf-8字符转ascii字符

    function utf8_urldecode($str) { $str = preg_replace("/%u([0-9a-f]{3,4})/i","&#x\\ ...

  6. arrayList的合并以及删除重复元素

    arrayList的合并: package listTest;//arrayList的合并 import java.util.ArrayList; public class arrayListTest ...

  7. 2015.05.12:json的常用处理方式

    1:json的介绍:json常用于前台与后台的数据传输  传递时需将json对象转换为json字符 JSON.stringify(); 2:json格式的查看应用:JsonView 3:后台获取到js ...

  8. Oracle诡异结果调查备忘 - A investigation memo of weird Oracle database search results

    最近需要维护一个差不多十多年前开发的ASP.Net程序,遇到了各种奇奇怪怪的问题,把其中比较难查明的问题记录如下: 问题一: 同样的SQL查询在不同服务器上查询结果不同.在QA环境下,结果完全正常,而 ...

  9. onethink入门笔记(二)

    5.onethink页面端获得后台服务器传值的方法 1:一般后台通过assign的值前台通过{$value}显示出来; 2:如果需要在js中使用 则可以通过 在js中写 var m = "{ ...

  10. grub的sol

    http://smcijohnny.blogspot.com/2015/06/linuxsolserial-over-lan.html https://www.hiroom2.com/2016/06/ ...