HTML5技术

HTML5 之图片上传预处理 - 狙击手+

字号+ 作者:H5之家 来源:H5之家 2017-06-26 10:01 我要评论( )

在开发 H5 应用的时候碰到一个问题, 应用只需要一张小的缩略图, 而用户用手机上传的确是一张大图, 手机摄像机拍的图片好几 M,这可要浪费很多流量。 像我这么为用户着想的程序员,绝对不会让这种事情发生的, 于是就有了本文。 获取图片 通过File API获取

在开发 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:

学习过程中遇到什么问题或者想获取学习资源的话,欢迎加入学习交流群
343599877,我们一起学前端!

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • 每天一个JS 小demo之通过键盘方向键操作图片上下左右无缝切换。主要知识点:事件 - catEatBird

    每天一个JS 小demo之通过键盘方向键操作图片上下左右无缝切换。主要

    2017-06-24 15:01

  • HTML5 History 模式 - 铭の

    HTML5 History 模式 - 铭の

    2017-06-24 15:00

  • HTML5-Web SQL数据库 - 小南瓜dxn

    HTML5-Web SQL数据库 - 小南瓜dxn

    2017-06-21 18:01

  • 带你零基础学习HTML5 - 实验楼

    带你零基础学习HTML5 - 实验楼

    2017-06-20 14:00

网友点评