图片纯前端JS压缩的实现

一、功能体验

先看demo:使用canvas在前端压缩图片并上传demo
 

如下截图:

相貌平平文件选择框

点击文件选择框,我们不妨选一张尺寸比较大的图片,例如下面这种2M多的钓鱼收获照:

上传演示使用的图片

于是图片歘歘歘地传上去了:
上传相关信息截图

此时我们点击最终上传完毕的图片地址,会发现原来2M多3000多像素宽的图片被限制为400像素宽了:
图片缩小后在浏览器中的预览效果图

保存到本地会发现图片尺寸已经变成只有70K了:
保存到本地显示的图片尺寸

以上就是图片前端压缩并上传demo的完整演示。

二、实现原理

要想使用JS实现图片的压缩效果,原理其实很简单,核心API就是使用canvasdrawImage()方法。

Canvas本质上就是一张位图,而drawImage()方法可以把一张大大的图片绘制在小小的Canvas画布上,不久等同于图片尺寸压缩了?

对于本案例的压缩,使用的5个参数的API方法:

context.drawImage(img, dx, dy, dWidth, dHeight);复制代码

各参数具体含义可以参见“Canvas API中文文档-drawImage”,这里不展开。

举例:
一张图片(假设图片对象是img)的原始尺寸是4000*3000,现在需要把尺寸限制为400*300大小,很简单,原理如下代码示意:

var canvas = document.createElement('canvas');
var context = canvas.getContext('2d');
canvas.width = 400;
canvas.height = 300;
// 核心JS就这个
context.drawImage(img,0,0,400,300);复制代码

把大图片画在一张小画布上,压缩就这么实现了,是不是简单的有点超乎想象。
 

三、如果想要上传或下载?

 

如果想要上传图片或者下载图片,可以使用canvas.toDataURL()或者canvas.toBlob()方法先进行转换。

1. canvas.toDataURL()

语法如下:

 

canvas.toDataURL(mimeType, qualityArgument)复制代码

可以把画布转换成base64格式信息图像信息,纯字符的图片表示法。

其中:
mimeType表示canvas导出来的base64图片的类型,默认是png格式,也即是默认值是'image/png',我们也可以指定为jpg格式'image/jpeg'或者webp等格式。file对象中的file.type就是文件的mimeType类型,在转换时候正好可以直接拿来用(如果有file对象)。
qualityArgument表示导出的图片质量,只要导出为jpgwebp格式的时候此参数才有效果,默认值是0.92,是一个比较合理的图片质量输出参数,通常情况下,我们无需再设定。

更多关于toDataURL()方法的信息可以参见“Canvas API中文文档-toDataURL()”。

2. canvas.toBlob()方法

语法如下:

 

canvas.toBlob(callback, mimeType, qualityArgument)复制代码

可以把画布转换成Blob文件,通常用在文件上传中,因为是二进制的,对后端更加友好。

toDataURL()方法相比,toBlob()方法是异步的,因此多了个callback参数,这个callback回调方法默认的第一个参数就是转换好的blob文件信息,本文一开始的demo案例中的文件上传就是将canvas图片转换成二进制的blob文件,然后再ajax上传的,代码如下:

// canvas转为blob并上传
canvas.toBlob(function (blob) {// 图片ajax上传var xhr = new XMLHttpRequest();// 开始上传xhr.open("POST", 'upload.php', true);xhr.send(blob);    
});复制代码

更多关于toBlob()方法的信息可以参见“Canvas API中文文档-toBlob()”。

一旦有了可传输的图像数据,上传下载就好实现了。例如下载前端压缩好的图片,可以参考我上一篇在掘金发布的文章:“纯JS生成并下载各种文本文件或图片”。

四、总结

经过“图片→canvas压缩→图片”三步曲,我们完成了图片前端压缩功能。

以上,感谢阅读!


作者:张鑫旭
链接:https://juejin.im/post/5bec3c6cf265da614312a0fa
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/143809.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

JavaScript 图像压缩

JavaScript 可以使用类似于 canvas 和 web workers 来实现图像压缩。 使用 canvas,可以将图像绘制到 canvas 上,然后使用 canvas 提供的 toBlob() 或 toDataURL() 方法将其转换为不同格式的图像。在这些方法中指定图像质量参数即可实现压缩。 使用 web…

英文论文(sci)解读复现【NO.11】一种先进的基于深度学习模型的植物病害检测:近期研究综述

此前出了目标检测算法改进专栏,但是对于应用于什么场景,需要什么改进方法对应与自己的应用场景有效果,并且多少改进点能发什么水平的文章,为解决大家的困惑,此系列文章旨在给大家解读发表高水平学术期刊中的 SCI论文&a…

如何自己制作简历模板?简历在线制作的方法介绍

找工作时好看并有意义的简历是十分重要的事儿,如何制作一份出色的简历,在漫天的简历中脱颖而出呢?如何自己制作简历模板?今天七分简历--简历在线制作就来给大家介绍方法吧。 1.选用正确的简历模板 所谓正确的简历模板,…

怎么从手机上下载应聘简历模板?个人简历如何从手机做?

​当我们找工作时,一般都会先准备一份应聘简历,当我们投递简历或者面试时都会用到,那么如果想要用手机来制作一份简历时,该如何操作呢?想要制作简历,那么首先要下载一份自己喜欢的简历模板,会让…

手机怎么做个人简历?多行业简历模板自由选择

如何利用手机来制作简历呢?现在找工作的时候,大多会使用手机来查看各种招聘app软件的信息来选择自己喜欢的工作。那么为了能够更好的获取面试的机会,那么准备一份优质的个人简历是必不可少的,那么从手机上如何下载一个精美简历模板…

简历怎么制作?简历制作的步骤是什么?

制作简历最基础的工作就是先了解自己,知道自己的兴趣爱好和职业特长是什么,明确自己以后发展的方向,以此作为依据来制作简历。一份优秀的简历,一般分为以下6个部分。 1、基础信息 只需要介绍求职者的个人信息,如&…

简历编辑导出工具(类似wps简历助手)

目前支持简历的编辑,导出,模块化,顺序调整,导出样式选择,完成进度等功能,已经完全可以满足简历编辑的基本需求 在线体验地址:需要的可以私信我,避免网站被攻击 一.项目架构 前端&a…

wps怎么免费导出简历_WPS表格办公—一键添加简历模板

我们在利用WPS文字与Word文字进行日常办公时,经常需要输入各种各样文档,当我们毕业季需要面试的时候,一份干净简洁的简历就必不可少了,那么对于WPS小白来说,制作一份简历就太难了,没关系,WPS为大…

wps怎么免费导出简历_简历模板免费下载wps手机,简历模板免费下载wps可编辑

现在,无论您在哪里工作,都需要自己准备一份简历。履历代表一个人的形象。拥有良好的履历是踏脚石。只要您可以在一张简历中精简一下您的72种变化,就可以帮助您敲开雇主的门。如果您拥有出色的技能,却不知道如何向他人展示它&#…

WPS简历模板的图标怎么修改_个人简历模板集锦,简历自我评价怎么写?

个人简历是自己学习生活的简短集锦,也是求职者自我评价和认定的主要材料。它是一扇窗户,能使用人单位通过它了解到求职者的部分情况,也能激起用人单位与求职者进一步接触的浓厚兴趣。关注——简历通,海量模板任你挑选。如若求职者…

软件测试简历,别再做无用的简历了

简历是你进入面试的敲门砖,也是留给意向公司的第一印象,所以这个很重要,必须在这上面做足了文章,一份优秀的面试简历是整个面试成败的重中之重,我们会详细分析如何准备简历才能保证简历不被刷掉。 简历通常有这几部分…

求职简历这样写,轻松搞定面试官

如果你是从网上投的简历,那么必然会经过 HR 的筛选,一张简历 HR 可能也就花 10 秒钟看一下,就会决定你这一关是成功还是失败。 就算你通过了筛选,后面的面试中,面试官也会根据你的简历来判断你究竟是否值得他花费很多…

WPS简历模板的图标怎么修改_简历无话可说怎么办?复试、调剂简历模板分享!...

文 | 果哥 槟果考研原创(ID:bgky666) 小伙伴们,这段时间准备复试简历了吗?今天文章的内容是手把手教你制作复试简历,文末也给大家附了复试、调剂简历模板! 1 复试简历内容 1 个人基本情况 主要包括:姓名、性…

如何用计算机制作个人简历,制作个人简历的模板(电脑个人简历制作步骤)

简历是我们求职过程中的一把钥匙,很多应届毕业生都做不好简历,那么今天就来教大家用Excel快速制作简历。 一、简历框架 打开Excel表格,选中7行23列,在【开始】选项卡下方,选择所有框线;然后点击【视图】&am…

计算机word简历制作教程,用word制作个人简历的方法

word中经常会被使用来制作个人简历,利用word制作个人简历具体该如何操作呢?下面是由学习啦小编分享的用word制作个人简历的方法,以供大家阅读和学习。 用word制作个人简历的方法(一) 步骤1:首先打开word,点击插入选项&#xff0c…

WPS简历模板的图标怎么修改_指导|让疫情之下的应届生,求职简历脱颖而出

2020年的开局有些艰难。受疫情来袭的影响,企业复工时间延迟、春季开学时间延迟、部分地区高校研究生复试安排也被推迟……许多大学生或许可以暂时在家做条咸鱼,但是对于应届毕业的同学来讲,时间已经不允许他们佛系下去了。要知道过去每年的“…

简历模板

版权声明:本文为博主原创文章,遵循 CC 4.0 BY 版权协议,转载请附上原文出处链接和本声明。 本文链接: https://blog.csdn.net/qq_35190492/article/details/103761746 有一线大厂面试点思维导图,也整理了很多我的文档…

如何制作一份优秀的简历?

一份优秀的求职简历,它的目的性一定很强,清楚的知道用人单位需要什么,简历中就会出现什么。整个简历的表达要简洁、语言清晰并且逻辑性要强。在制作简历的过程中你要有“心”。简历制作中一定要有心意,拒绝千篇一律的简历。那么&a…

wps怎么免费导出简历_简历中的自我评价怎么写,个人简历模板免费下载

个人简历对于我们求职工作来说是非常重要的,往往一份好的个人简历可以让你更好、更快地找到一份适合自己的工作。因为电子版的线上个人简历不仅仅制作过程简单,而且发送上传也特别简单!如果你想制作的话,就赶紧跟着小编一起来试试…

wps怎么免费导出简历_稻壳儿简历免费手机,手机wps如何免费导出简历?

HR筛选简历的第二步,50份简历挑出10份更好的。她会看你“长篇累牍”的工作内容描述,还是更短的个人综述?当然是后者。所以,“个人综述”部分,要放到“个人信息”之后“工作经验”之前。这部分不用多写,切忌…