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的ruby-position固定注音位置的用法示例
Jul 05 HTML / CSS
css3media响应式布局实例
Jul 08 HTML / CSS
利用css3径向渐变做一张优惠券的示例
Mar 22 HTML / CSS
HTML5标签小集
Aug 02 HTML / CSS
一款html5 canvas实现的图片玻璃碎片特效
Sep 11 HTML / CSS
h5调用摄像头的实现方法
Jun 01 HTML / CSS
使用phonegap查找联系人的实现方法
Mar 31 HTML / CSS
浅谈HTML5 Web Worker的使用
Jan 05 HTML / CSS
高清屏下canvas重置尺寸引发的问题的解决
Oct 14 HTML / CSS
html5 移动端视频video的android兼容(去除播放控件、全屏)
Mar 26 HTML / CSS
Html5+CSS3+EL表达式问题小结
Dec 19 HTML / CSS
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支持页面回退的两种方法
2008/01/10 PHP
php cookie 作用范围?不要在当前页面使用你的cookie
2009/03/24 PHP
PHP 模拟登陆MSN并获得用户信息
2009/05/16 PHP
理解php原理的opcodes(操作码)
2010/10/26 PHP
超强多功能php绿色集成环境详解
2017/01/25 PHP
PDO::prepare讲解
2019/01/29 PHP
游戏人文件夹程序 ver 4.03
2006/07/14 Javascript
javascript中match函数的用法小结
2014/02/08 Javascript
使用upstart把nodejs应用封装为系统服务实例
2014/06/01 NodeJs
jQuery左右滚动支持图片放大缩略图图片轮播代码分享
2015/08/26 Javascript
JQuery validate插件Remote用法大全
2016/05/15 Javascript
JavaScript提升性能的常用技巧总结【经典】
2016/06/20 Javascript
JS判断是否在微信浏览器打开的简单实例(推荐)
2016/08/24 Javascript
使用jQuery的toggle()方法对HTML标签进行显示、隐藏的方法(示例)
2016/09/01 Javascript
jQuery阻止移动端遮罩层后页面滚动
2017/03/15 Javascript
JavaScript的继承实现小结
2017/05/07 Javascript
jquery中为什么能用$操作
2019/06/18 jQuery
实现python版本的按任意键继续/退出
2016/09/26 Python
利用python将xml文件解析成html文件的实现方法
2017/12/22 Python
Python3中编码与解码之Unicode与bytes的讲解
2019/02/28 Python
python构造函数init实例方法解析
2020/01/19 Python
python虚拟环境模块venv使用及示例
2020/03/04 Python
Python基于numpy模块实现回归预测
2020/05/14 Python
django queryset 去重 .distinct()说明
2020/05/19 Python
python3爬虫中异步协程的用法
2020/07/10 Python
Anaconda的安装与虚拟环境建立
2020/11/18 Python
Python实现小黑屋游戏的完整实例
2021/01/06 Python
HTML5 CSS3打造相册效果附源码下载
2014/06/16 HTML / CSS
浅谈html5 video 移动端填坑记
2018/01/15 HTML / CSS
分家协议书
2014/04/21 职场文书
无财产离婚协议书范本
2014/10/28 职场文书
2014年社区计生工作总结
2014/11/18 职场文书
土木工程毕业答辩开场白
2015/05/29 职场文书
MySQL触发器的使用
2021/05/24 MySQL
python在package下继续嵌套一个package
2022/04/14 Python
Python Matplotlib绘制动画的代码详解
2022/05/30 Python