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的文字阴影—text-shadow的使用方法
Dec 25 HTML / CSS
纯CSS3实现给头像加个光芒四射且旋转的背景动画效果
May 07 HTML / CSS
CSS3制作苹果风格键盘特效
Feb 26 HTML / CSS
纯CSS3制作的鼠标悬停时边框旋转
Jan 03 HTML / CSS
利用CSS3实现进度条的两种姿势详解
Mar 21 HTML / CSS
CSS3之2D与3D变换的实现方法
Jan 28 HTML / CSS
css3 flex实现div内容水平垂直居中的几种方法
Mar 27 HTML / CSS
纯HTML5+CSS3制作生日蛋糕代码
Nov 16 HTML / CSS
html5中去掉input type date默认样式的方法
Sep 06 HTML / CSS
详解利用canvas实现环形进度条的方法
Jun 12 HTML / CSS
html5 Canvas画图教程(8)—canvas里画曲线之bezierCurveTo方法
Jan 09 HTML / CSS
html5图片上传预览示例分享
Apr 14 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 has encountered an Access Violation 错误的解决方法
2010/01/17 PHP
PHP数组的交集array_intersect(),array_intersect_assoc(),array_inter_key()函数的小问题
2011/05/29 PHP
PHP三元运算符的结合性介绍
2012/01/10 PHP
CI框架中cookie的操作方法分析
2014/12/12 PHP
PHP中类的自动加载的方法
2017/03/17 PHP
laravel 实现设置时区的简单方法
2019/10/10 PHP
js切换div css注意的细节
2012/12/10 Javascript
js在输入框屏蔽按键,只能键入数字的示例代码
2014/01/03 Javascript
Jquery获取元素的父容器对象示例代码
2014/02/10 Javascript
js获取指定的cookie的具体实现
2014/02/20 Javascript
JavaScript实现跑马灯抽奖活动实例代码解析与优化(二)
2016/02/16 Javascript
ArtEditor富文本编辑器增加表单提交功能
2016/04/18 Javascript
jQuery获取file控件中图片的宽高与大小
2016/08/04 Javascript
js实现1,2,3,5数字按照概率生成
2017/09/12 Javascript
vue树形结构获取键值的方法示例
2018/06/21 Javascript
[04:52]第二届DOTA2亚洲邀请赛主赛事第一天比赛集锦:OG娜迦海妖放大配合谜团大中3人
2017/04/02 DOTA
[45:18]2018DOTA2亚洲邀请赛 4.3 突围赛 Optic vs iG 第一场
2018/04/04 DOTA
举例简单讲解Python中的数据存储模块shelve的用法
2016/03/03 Python
python cx_Oracle模块的安装和使用详细介绍
2017/02/13 Python
python列表的增删改查实例代码
2018/01/30 Python
Python中elasticsearch插入和更新数据的实现方法
2018/04/01 Python
pandas 数据实现行间计算的方法
2018/06/08 Python
如何利用Python分析出微信朋友男女统计图
2019/01/25 Python
Django项目主urls导入应用中views的红线问题解决
2019/08/10 Python
Python通过TensorFLow进行线性模型训练原理与实现方法详解
2020/01/15 Python
Python+Selenium随机生成手机验证码并检查页面上是否弹出重复手机号码提示框
2020/09/21 Python
css3实现信纸/同学录效果的示例代码
2018/12/11 HTML / CSS
IE8下CSS3选择器nth-child() 不兼容问题的解决方法
2016/11/16 HTML / CSS
html5响应式开发自动计算fontSize的方法
2020/01/13 HTML / CSS
销售行政专员职责
2014/01/03 职场文书
计算机数据库专业职业生涯规划书
2014/02/08 职场文书
电焊工岗位职责
2014/03/06 职场文书
新年联欢会主持词
2014/03/27 职场文书
自愿解除劳动合同协议书
2014/09/11 职场文书
分家协议书范本
2016/03/22 职场文书
nodejs利用readline提示输入内容实例代码
2021/07/15 NodeJs