HTML5 之图片上传预处理

作者: Lupino | 来源:发表于2017-06-04 18:39 被阅读3320次

在开发 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:http://weekcool.com/js/upload.js

需要帮助留言或加微信: Fisher_like

如果觉得文章好,对你有启发就来关注我吧。

相关文章

  • HTML5 之图片上传预处理

    在开发 H5 应用的时候碰到一个问题,应用只需要一张小的缩略图,而用户用手机上传的确是一张大图,手机摄像机拍的图片...

  • HTML5 之图片上传预处理

    在开发 H5 应用的时候碰到一个问题,应用只需要一张小的缩略图,而用户用手机上传的确是一张大图,手机摄像机拍的图片...

  • html5图片上传

    本文利用html5提供的File API实现了图片预览和上传功能。这里先看代码,然后再解释要点,为了方便,将htm...

  • iOS基于NSURLSession的多图片上传功能

    先上方法名,该方法提供了几个图片缩放的预处理功能,以及上传失败再次上传的功能。由于我们后台不支持修改图片名字,就去...

  • Html5 图片上传和预览 FileReader

    Html5 图片上传和预览 New FileReader()的使用将图片以base64编码格式变为字符串,以此...

  • Html5拍照上传图片到servlet

    今天记录下,html5图片canvas压缩后上传,上传时的数据是formdata中的Blob封装数据,然后到ser...

  • 利用file和canvas实现图片压缩上传

    利用的技术 HTML5 的 file API 和 canvas 的 drawImage API。 图片上传压缩的意...

  • 使用filereader实现图片分辨率校验

    之前有遇到一个需求,就是用户上传图片,前端需要在上传之前对图片进行分辨率的校验,可以使用html5新增的filer...

  • 基于html5的多图片上传

    基于html5的多图片上传 本文是建立在张鑫旭大神的多文图片传的基础之上.首先先放出来大神多图片上传的博客地址:h...

  • html5+express上传多图

    在web开发中上传图片是一个很常见的操作,本文简单介绍一下通过jQuery结合html5中的一些新标签实现图片上传...

网友评论

  • 07bbf8cdead6:学习了
  • 东方翔:宽和高应该取 naturalHeight 和 naturalWidth 才是图片自身的宽和高。
    另外,比较宽和高的时候,应该是 naturalWidth/MAX_WIDTH 和 naturalHeight/MAX_HEIGHT 才有意义吧。
  • nz925114:var width = img.width; var height = img.height; 是不是不对啊? 是不是应该是自然宽度和高度,那个单词是什么忘了,in开头的
  • 全栈之巅Johnny:有没有专门的package来处理这块?
  • 4d22af03cb10:toBlob的兼容性问题怎么解决的呢?
    Lupino:https://github.com/blueimp/JavaScript-Canvas-to-Blob 引用一下这一个库,就可以解决

本文标题:HTML5 之图片上传预处理

本文链接:https://www.haomeiwen.com/subject/tstbfxtx.html