HTML5 实现图片上传预处理功能


Posted in HTML / CSS onFebruary 06, 2020

在开发 H5 应用的时候碰到一个问题,应用只需要一张小的缩略图,而用户用手机上传的确是一张大图,手机摄像机拍的图片好几 M,这可要浪费很多流量。

像我这么为用户着想的程序员,绝对不会让这种事情发生的,于是就有了本文。

获取图片

通过 File API 获取图片。

var input = document.createElement('input');
input.type = 'file';
input.addEventListener('change', function() {
  var file = this.files[0];
});
input.click();

预览图片

使用 createObjectURL() 或者 FileReader 预览图片

var img = document.createElement('img');
img.src = window.URL.createObjectURL(file);
var img = document.createElement("img");
var reader = new FileReader();
reader.onload = function(e) {
  img.src = e.target.result;
}
reader.readAsDataURL(file);

使用 canvas 做缩略图

var canvas = document.createElement("canvas");
var ctx = canvas.getContext("2d");
var MAX_WIDTH = 800;
var MAX_HEIGHT = 600;
var width = img.width;
var height = img.height;

if (width > height) {
  if (width > MAX_WIDTH) {
    height *= MAX_WIDTH / width;
    width = MAX_WIDTH;
  }
} else {
  if (height > MAX_HEIGHT) {
    width *= MAX_HEIGHT / height;
    height = MAX_HEIGHT;
  }
}
canvas.width = width;
canvas.height = height;
ctx.drawImage(img, 0, 0, width, height);

上传缩略图

canvas.toBlob(function(blob) {
  var form = new FormData();
  form.append('file', blob);
  fetch('/api/upload', {method: 'POST', body: form});
});

结语

DEMO:weekcool.com/js/upload.j…

总结

以上所述是小编给大家介绍的HTML5 实现图片上传预处理功能,希望对大家有所帮助!

HTML / CSS 相关文章推荐
CSS3 translate导致字体模糊的实例代码
Aug 30 HTML / CSS
CSS3网格的三个新特性详解
Apr 04 HTML / CSS
利用Bootstrap实现漂亮简洁的CSS3价格表实例源码
Mar 02 HTML / CSS
简单几步用纯CSS3实现3D翻转效果
Jan 17 HTML / CSS
用CSS3和table标签实现一个圆形轨迹的动画的示例代码
Jan 17 HTML / CSS
详解H5本地储存Web Storage
Jul 03 HTML / CSS
字中字效果的实现【html5实例】
May 03 HTML / CSS
Html5 web本地存储实例详解
Jul 28 HTML / CSS
HTML5的Video标签有部分MP4无法播放的问题解析(多图)
Aug 18 HTML / CSS
ivx平台开发之不用代码实现一个九宫格抽奖功能
Jan 27 HTML / CSS
详解CSS不定宽溢出文本适配滚动
May 24 HTML / CSS
DIV CSS实现网页背景半透明效果
Dec 06 HTML / CSS
微信小程序canvas实现水平、垂直居中效果
Feb 05 #HTML / CSS
Html5定位终极解决方案
Feb 05 #HTML / CSS
canvas简单连线动画的实现代码
Feb 04 #HTML / CSS
html5手机键盘弹出收起的处理
Jan 20 #HTML / CSS
canvas实现烟花的示例代码
Jan 16 #HTML / CSS
使用iframe+postMessage实现页面跨域通信的示例代码
Jan 14 #HTML / CSS
Html5跳转到APP指定页面的实现
Jan 14 #HTML / CSS
You might like
php实例分享之二维数组排序
2014/05/15 PHP
typecho插件编写教程(六):调用接口
2015/05/28 PHP
PHP 实现手机端APP支付宝支付功能
2018/06/07 PHP
php高清晰度无损图片压缩功能的实现代码
2018/12/09 PHP
详解PHP PDO简单教程
2019/05/28 PHP
一个JavaScript变量声明的知识点
2013/10/28 Javascript
如何实现修改密码时密码框显示保存到cookie的密码
2013/12/10 Javascript
我的Node.js学习之路(三)--node.js作用、回调、同步和异步代码 以及事件循环
2014/07/06 Javascript
JS基于FileSystemObject创建一个指定路径的TXT文本文件
2015/08/05 Javascript
Flow之一个新的Javascript静态类型检查器
2015/12/21 Javascript
javascript面向对象程序设计高级特性经典教程(值得收藏)
2016/05/19 Javascript
对js eval()函数的一些见解
2016/08/15 Javascript
前端框架Vue.js构建大型应用浅析
2016/09/12 Javascript
jQuery事件对象总结
2016/10/17 Javascript
jquery.Jcrop结合JAVA后台实现图片裁剪上传实例
2016/11/05 Javascript
jQuery实现获取h1-h6标题元素值的方法
2017/03/06 Javascript
JSON对象转化为字符串详解
2017/08/11 Javascript
Node.js 多进程处理CPU密集任务的实现
2019/05/26 Javascript
深入理解 JS 垃圾回收
2019/06/03 Javascript
JS实现音量控制拖动
2020/01/15 Javascript
js 计算月/周的第一天和最后一天代码
2020/02/01 Javascript
使用 Github Actions 自动部署 Angular 应用到 Github Pages的方法
2020/07/20 Javascript
解决vuex改变了state的值,但是页面没有更新的问题
2020/11/12 Javascript
NestJs使用Mongoose对MongoDB操作的方法
2021/02/22 Javascript
[50:59]2018DOTA2亚洲邀请赛 4.7 总决赛 LGD vs Mineski第四场
2018/04/10 DOTA
[55:44]OG vs NAVI 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
python中随机函数random用法实例
2015/04/30 Python
python使用str & repr转换字符串
2016/10/13 Python
django进阶之cookie和session的使用示例
2018/08/17 Python
python对象与json相互转换的方法
2019/05/07 Python
python3 requests库文件上传与下载实现详解
2019/08/22 Python
Python类中方法getitem和getattr详解
2019/08/30 Python
销售主管岗位职责范本
2014/02/14 职场文书
学校领导班子对照检查材料
2014/09/24 职场文书
2015年初三班主任工作总结
2015/05/21 职场文书
2017大学生寒假社会实践心得体会
2016/01/14 职场文书