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让登陆面板3D旋转起来
May 03 HTML / CSS
HTML5 语义化结构化规范化
Oct 17 HTML / CSS
HTML5安全介绍之内容安全策略(CSP)简介
Jul 10 HTML / CSS
HTML5样式控制示例代码
Nov 27 HTML / CSS
深入浅析HTML5中的SVG
Nov 27 HTML / CSS
浅谈html5之sse服务器发送事件EventSource介绍
Aug 28 HTML / CSS
HTML5 Canvas实现360度全景图的示例代码
Jan 29 HTML / CSS
H5最强接口之canvas实现动态图形功能
May 31 HTML / CSS
Ratchet 模态框的实现
Aug 19 HTML / CSS
萌新的HTML5 入门指南
Nov 06 HTML / CSS
几款流行的HTML5 UI框架比较(小结)
Apr 08 HTML / CSS
CSS中实现动画效果-附案例
Feb 28 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
火影忍者:这才是千手柱间和扉间的真正死因,角都就比较搞笑了!
2020/03/10 日漫
常用的php对象类型判断
2008/08/27 PHP
PHP中定义数组常量(array常量)的方法
2014/11/17 PHP
php array_map使用自定义的函数处理数组中的每个值
2016/10/26 PHP
Javascript实例教程(19) 使用HoTMetal(1)
2006/12/23 Javascript
jQuery1.3.2 升级到jQuery1.4.4需要修改的地方
2011/01/06 Javascript
jquery js 重置表单 reset()具体实现代码
2013/08/05 Javascript
Javascript玩转继承(一)
2014/05/08 Javascript
jQuery浏览器CSS3特写兼容实例
2015/01/19 Javascript
jquery制作 随机弹跳的小球特效
2015/02/01 Javascript
JavaScript获取页面中第一个锚定文本的方法
2015/04/03 Javascript
JavaScript中的Math.SQRT1_2属性使用简介
2015/06/14 Javascript
jQuery+css实现炫目的动态块漂移效果
2016/01/28 Javascript
【经验总结】编写JavaScript代码时应遵循的14条规律
2016/06/20 Javascript
对javascript继承的理解
2016/10/11 Javascript
中高级前端必须了解的JS中的内存管理(推荐)
2019/07/04 Javascript
详谈vue中router-link和传统a链接的区别
2020/07/22 Javascript
[48:45]Ti4 循环赛第二日 NEWBEE vs EG
2014/07/11 DOTA
python使用cStringIO实现临时内存文件访问的方法
2015/03/26 Python
python 简单的绘图工具turtle使用详解
2017/06/21 Python
Python基于Flask框架配置依赖包信息的项目迁移部署
2018/03/02 Python
PyTorch上实现卷积神经网络CNN的方法
2018/04/28 Python
pycharm中使用anaconda部署python环境的方法步骤
2018/12/19 Python
python实现名片管理系统项目
2019/04/26 Python
python实现上传文件到linux指定目录的方法
2020/01/03 Python
TensorFlow2.X结合OpenCV 实现手势识别功能
2020/04/08 Python
深入探究HTML5的History API
2015/07/09 HTML / CSS
卫校中专生个人自我评价
2013/09/19 职场文书
计算机应用与科学个人的自我评价
2013/11/15 职场文书
检举信的格式及范文
2014/04/04 职场文书
服务承诺书怎么写
2014/05/24 职场文书
工作失职自我检讨书
2015/05/05 职场文书
晚会开场白和结束语
2015/05/29 职场文书
管理者日常工作必备:22条企业管理流程模板!
2019/07/12 职场文书
JS数组方法some、every和find的使用详情
2021/10/05 Javascript
python人工智能human learn绘图可创建机器学习模型
2021/11/23 Python