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 相关文章推荐
使用HTML5和CSS3表单验证功能
May 05 HTML / CSS
CSS实现定位元素居中的方法
Jun 23 HTML / CSS
移动端适配 使px自动转换rem
Aug 26 HTML / CSS
CSS3实现div从下往上滑入滑出效果示例
Apr 28 HTML / CSS
详解通过变换矩阵实现canvas的缩放功能
Jan 14 HTML / CSS
仿酷狗html5手机音乐播放器主要部分代码
May 15 HTML / CSS
mui几种页面跳转方式对比总结概括
Aug 18 HTML / CSS
基于HTML5+CSS3实现简单的时钟效果
Sep 11 HTML / CSS
HTML5 解决苹果手机不能自动播放音乐问题
Dec 27 HTML / CSS
使用css样式设计一个简单的html登陆界面的实现
Mar 30 HTML / CSS
CSS3实现的3D隧道效果
Apr 27 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
Zend Framework教程之Zend_Config_Ini用法分析
2016/03/23 PHP
Yii视图CGridView列表用法实例分析
2016/07/12 PHP
thinkPHP模板中函数的使用方法示例
2016/11/30 PHP
PHP实现的DES加密解密类定义与用法示例
2020/11/02 PHP
PHP代码覆盖率统计详解
2020/07/22 PHP
JavaScript基本概念初级讲解论坛贴的学习记录
2009/02/22 Javascript
Firefox window.close()的使用注意事项
2009/04/11 Javascript
JavaScript DOM学习第八章 表单错误提示
2010/02/19 Javascript
用js实现计算加载页面所用的时间
2010/04/02 Javascript
利用CSS、JavaScript及Ajax实现高效的图片预加载
2013/10/16 Javascript
javascript 获取网页标题代码实例
2014/01/22 Javascript
javascript关于运动的各种问题经典总结
2015/04/27 Javascript
常用的几个JQuery代码片段
2017/03/13 Javascript
angular2路由切换改变页面title的示例代码
2017/08/23 Javascript
纯js封装的ajax功能函数与用法示例
2018/05/14 Javascript
Vue中使用clipboard实现复制功能
2018/09/05 Javascript
浅谈JS中几种轻松处理'this'指向方式
2019/09/16 Javascript
js实现消灭星星(web简易版)
2020/03/24 Javascript
基于VSCode调试网页JavaScript代码过程详解
2020/07/20 Javascript
Openlayers实现地图的基本操作
2020/09/28 Javascript
vue3自定义dialog、modal组件的方法
2021/01/04 Vue.js
Python3实现生成随机密码的方法
2014/08/23 Python
Python中函数的用法实例教程
2014/09/08 Python
利用Pandas 创建空的DataFrame方法
2018/04/08 Python
Python参数类型以及常见的坑详解
2019/07/08 Python
pandas factorize实现将字符串特征转化为数字特征
2019/12/19 Python
python实现逢七拍腿小游戏的思路详解
2020/05/26 Python
Python根据字符串调用函数过程解析
2020/11/05 Python
用python 绘制茎叶图和复合饼图
2021/02/26 Python
全球领先的各类汽车配件零售商:Advance Auto Parts
2016/08/26 全球购物
匡威荷兰官方网站:Converse荷兰
2018/10/24 全球购物
护理专业优质毕业生自荐书
2014/01/31 职场文书
继承公证书样本
2014/04/04 职场文书
2014年企业党建工作总结
2014/12/18 职场文书
人事任命书范本
2015/09/21 职场文书
pandas提升计算效率的一些方法汇总
2021/05/30 Python