您现在的位置是:网站首页> 编程资料编程资料
深入研究HTML5实现图片压缩上传功能_html5_网页制作_
2023-11-11
351人已围观
简介 下面小编就为大家带来一篇深入研究HTML5实现图片压缩上传功能。小编觉得挺不错的,现在分享给大家。也给大家一个参考,一起跟随小编过来看看吧
上篇文章中提到移动端上传图片,我们知道现在流量还是挺贵的,手机的像素是越来越高,拍个照动不动就是好几M,伤不起。虽然客户端可以轻轻松松实现图片压缩再上传,但是我们的应用还可能在浏览器里面打开,怎么办呢,图片压缩。受以前PC上的开发思维影响,尼玛js哪有权限去操作文件,哪有资格压缩图片啊,搞不了,你们客户端去整吧。只能说自己还是有些井底之蛙了。在HTML5的影响下,前端能干的事情越来越多了,开发的功能逼格也越来越高了,H5万岁!前端的魅力也在这,过去不可能的并不意味现在、以后不可能,努力吧,骚年!
js怎么压缩图片???潜意识里确实一开始是觉得实现不了,后来翻阅资料,研究了下,发现可行!搞起!
先说说H5以前我们怎么上传,一般是借助插件、flash或者干脆一个文件form表单,少操不少心。
自从有了H5,老板再也不担心我的开发了。
上篇文章提到图片上传用到了FileReader,FormData,实际上主要用这两个我们基本能实现图片的预览和上传了。实现图片压缩,我们需要借助canvas,是的,就是canvas!
大致思路是:
1、创建一个图片和一个canvas
- var image = new Image(),
- canvas = document.createElement("canvas"),
- ctx = canvas.getContext('2d');
2、我们将input中选择的图片地址通过FileReader获取后赋给新建的图片对象,然后将图片对象丢到canvas画布上。
- var file = obj.files[0];
- var reader = new FileReader();//读取客户端上的文件
- reader.onload = function() {
- var url = reader.result;//读取到的文件内容.这个属性只在读取操作完成之后才有效,并且数据的格式取决于读取操作是由哪个方法发起的.所以必须使用reader.onload,
- image.src=url;//reader读取的文件内容是base64,利用这个url就能实现上传前预览图片
- ...
- };
- image.onload = function() {
- var w = image.naturalWidth,
- h = image.naturalHeight;
- canvas.width = w;
- canvas.height = h;
- ctx.drawImage(image, 0, 0, w, h, 0, 0, w, h);
- fileUpload();
- };
- reader.readAsDataURL(file);
这里需要注意的是,canvas将图片画到画布上的时候需要确定canvas的尺寸,同时设定好drawImage的参数,具体如下:
- void ctx.drawImage(image, sx, sy, sWidth, sHeight, dx, dy, dWidth, dHeight);

dx源图像的左上角在目标canvas上 X 轴的位置。
dy源图像的左上角在目标canvas上 Y 轴的位置。
dWidth在目标canvas上绘制图像的宽度。 允许对绘制的图像进行缩放。 如果不说明, 在绘制时图片宽度不会缩放。
dHeight在目标canvas上绘制图像的高度。 允许对绘制的图像进行缩放。 如果不说明, 在绘制时图片高度不会缩放。
sx需要绘制到目标上下文中的,源图像的矩形选择框的左上角 X 坐标。
sy需要绘制到目标上下文中的,源图像的矩形选择框的左上角 Y 坐标。
sWidth需要绘制到目标上下文中的,源图像的矩形选择框的宽度。如果不说明,整个矩形从坐标的sx和sy开始,到图像的右下角结束。
sHeight需要绘制到目标上下文中的,源图像的矩形选择框的高度。
为了上传完整的图片,这里dx,dy必须设置为0,dWidth和dHeight必须设置为原始图片的宽度和高度。这就是为什么我们需要等image对象下载完毕后获取其原始尺寸,这很关键!
3、图片上传
- function fileUpload() {
- var data = canvas.toDataURL("image/jpeg", quality);
- //dataURL 的格式为 “data:image/png;base64,****”,逗号之前都是一些说明性的文字,我们只需要逗号之后的就行了
- datadata = data.split(',')[1];
- data = window.atob(data);
- var ia = new Uint8Array(data.length);
- for (var i = 0; i < data.length; i++) {
- ia[i] = data.charCodeAt(i);
- };
- //canvas.toDataURL 返回的默认格式就是 image/png
-
相关内容
- HTML5 Canvas API中drawImage()方法的使用实例_html5_网页制作_
- 使用HTML5 Canvas API中的clip()方法裁剪区域图像_html5_网页制作_
- HTML5 Canvas实现文本对齐的方法总结_html5_网页制作_
- HTML5仿手机微信聊天界面_html5_网页制作_
- 我叫MT五一活动火爆来袭 符石经验每日送_手机游戏_游戏攻略_
- 全民小镇登录送好礼6天金币钻石送不停详情_手机游戏_游戏攻略_
- 天天酷跑4月29日最新破解版刷分教程攻略_手机游戏_游戏攻略_
- 迷你西游孙思邈属性技能缘搭配效果一览_手机游戏_游戏攻略_
- 天天飞车4月29日最新破解版刷分刷金币不封号教程攻略_手机游戏_游戏攻略_
- 天天飞车4月29日最新无限飞机刷金币教程_手机游戏_游戏攻略_
点击排行
本栏推荐
