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混合模式mix-blend-mode/background-blend-mode简介
Mar 15 HTML / CSS
css3动画事件—webkitAnimationEnd与计时器time事件
Jan 31 HTML / CSS
浅谈css3中calc在less编译时被计算的解决办法
Dec 04 HTML / CSS
CSS3 实现飘动的云朵动画
Dec 01 HTML / CSS
canvas实现有递增动画的环形进度条的实现方法
Jul 10 HTML / CSS
HTML5的结构和语义(3):语义性的块级元素
Oct 17 HTML / CSS
HTML5 实战PHP之Web页面表单设计
Oct 09 HTML / CSS
关于HTML5的安全问题开发人员需要牢记的
Jun 21 HTML / CSS
HTML5 script元素async、defer异步加载使用介绍
Aug 23 HTML / CSS
Html5自定义字体解决方法
Oct 09 HTML / CSS
H5离线存储Manifest原理及使用
Apr 28 HTML / CSS
html,css,javascript是怎样变成页面的
May 07 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 parse_url 一个好用的函数
2009/10/03 PHP
PHP修改session_id示例代码
2014/01/08 PHP
js+FSO遍历文件夹下文件并显示
2007/03/07 Javascript
JavaScript学习笔记(一) js基本语法
2011/10/25 Javascript
jquery解决图片路径不存在执行替换路径
2013/02/06 Javascript
不用锚点也可以平滑滚动到页面的指定位置实现代码
2013/05/08 Javascript
基于JavaScript代码实现兼容各浏览器的设为首页和加入收藏
2016/01/07 Javascript
Bootstrap项目实战之子栏目资讯内容
2016/04/25 Javascript
BootStrap的table表头固定tbody滚动的实例代码
2016/08/24 Javascript
javascript深拷贝和浅拷贝详解
2017/02/14 Javascript
jQuery获取Table某列的值(推荐)
2017/03/03 Javascript
javascript图片预览和上传(兼容IE)
2017/03/15 Javascript
ES6新特性之Symbol类型用法分析
2017/03/31 Javascript
基于ES6作用域和解构赋值详解
2017/11/03 Javascript
JS基于设计模式中的单例模式(Singleton)实现封装对数据增删改查功能
2018/02/06 Javascript
JS动态插入脚本和插入引用外部链接脚本的方法
2018/05/21 Javascript
vue 更改连接后台的api示例
2019/11/11 Javascript
JQuery实现折叠式菜单的详细代码
2020/06/03 jQuery
Python爬虫框架Scrapy安装使用步骤
2014/04/01 Python
Python中MySQL数据迁移到MongoDB脚本的方法
2016/04/28 Python
python中使用%与.format格式化文本方法解析
2017/12/27 Python
Python 循环语句之 while,for语句详解
2018/04/23 Python
Python控制键盘鼠标pynput的详细用法
2019/01/28 Python
python 实现PIL模块在图片画线写字
2020/05/16 Python
如何利用python之wxpy模块玩转微信
2020/08/17 Python
Python如何使用ConfigParser读取配置文件
2020/11/12 Python
html5 Canvas画图教程(6)—canvas里画曲线之arcTo方法
2013/01/09 HTML / CSS
ECHT官方网站:男女健身服
2020/02/14 全球购物
简历的自我评价范文
2014/02/04 职场文书
家长写给老师的建议书
2014/03/13 职场文书
年终晚会主持词
2014/03/25 职场文书
2015暑假社会调查报告
2015/07/13 职场文书
结婚幸福感言
2015/08/01 职场文书
反邪教学习心得体会
2016/01/15 职场文书
高中英语教学反思范文
2016/03/02 职场文书
创业计划书之干洗店
2019/09/10 职场文书