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 倾斜的网页图片库实例教程
Nov 14 HTML / CSS
CSS3 滤镜 webkit-filter详细介绍及使用方法
Dec 27 HTML / CSS
纯CSS改变webkit内核浏览器的滚动条样式
Apr 17 HTML / CSS
用CSS3的box-reflect设置文字倒影效果的方法讲解
Mar 07 HTML / CSS
突袭HTML5之Javascript API扩展3—本地存储全新体验
Jan 31 HTML / CSS
html5实现微信打飞机游戏
Mar 27 HTML / CSS
使用html5新特性轻松监听任何App自带返回键的示例
Mar 13 HTML / CSS
Html5应用程序缓存(Cache manifest)
Jun 04 HTML / CSS
canvas因为图片资源不在同一域名下而导致的跨域污染画布的解决办法
Jan 18 HTML / CSS
详解通过focusout事件解决IOS键盘收起时界面不归位的问题
Jul 18 HTML / CSS
Html5 webRTC简单实现视频调用的示例代码
Sep 23 HTML / CSS
奇妙的 CSS shapes(CSS图形)
Apr 05 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中的字符串函数
2006/10/09 PHP
2个自定义的PHP in_array 函数,解决大量数据判断in_array的效率问题
2014/04/08 PHP
ThinkPHP连接Oracle数据库
2016/04/22 PHP
PHP文件操作详解
2016/12/30 PHP
利用PHP计算有多少小于当前数字的数字方法示例
2020/08/26 PHP
多浏览器兼容的获取元素和鼠标的位置的js代码
2009/12/15 Javascript
$.format,jquery.format 使用说明
2011/07/13 Javascript
新浪微博字数统计 textarea字数统计实现代码
2011/08/28 Javascript
jQuery设置和获取HTML、文本和值示例
2014/07/08 Javascript
基于javascript的COOkie的操作实现只能点一次
2014/12/26 Javascript
jquery动态导航插件dynamicNav用法实例分析
2015/09/06 Javascript
基于Jquery代码实现手风琴菜单
2015/11/19 Javascript
多种jQuery绑定事件的实现方式
2016/06/13 Javascript
JavaScript数据类型学习笔记分享
2016/09/01 Javascript
在Docker快速部署Node.js应用的详细步骤
2016/09/02 Javascript
详解Vue.js动态绑定class
2016/12/20 Javascript
vue和react等项目中更简单的实现展开收起更多等效果示例
2018/02/22 Javascript
antd的select下拉框因为数据量太大造成卡顿的解决方式
2020/10/31 Javascript
[07:59]2014DOTA2叨叨刀塔 林熊猫称被邀请赛现场盛况震撼
2014/07/21 DOTA
简明 Python 基础学习教程
2007/02/08 Python
用Python的pandas框架操作Excel文件中的数据教程
2015/03/31 Python
浅析Python基础-流程控制
2016/03/18 Python
python利用wx实现界面按钮和按钮监听和字体改变的方法
2019/07/17 Python
python的常见矩阵运算(小结)
2019/08/07 Python
Python图像处理库PIL的ImageFont模块使用介绍
2020/02/26 Python
python实现跨excel sheet复制代码实例
2020/03/03 Python
使用Python画了一棵圣诞树的实例代码
2020/11/27 Python
英国地毯卖家:The Rug Seller
2019/07/18 全球购物
《大自然的语言》教学反思
2014/04/08 职场文书
大学活动总结范文
2014/04/29 职场文书
大学班级学风建设方案
2014/05/01 职场文书
大学生应聘求职信
2014/05/26 职场文书
通报表扬范文
2015/01/17 职场文书
SpringBoot整合阿里云视频点播的过程详解
2021/12/06 Java/Android
基于Python实现股票收益率分析
2022/04/02 Python
如何打开Win11系统注册表编辑器?Win11注册表编辑器打开修复方法
2022/04/05 数码科技