场景描述
上次好不容易搞清楚,前端使用base64编码格式上传图片,但随之而来又有了新问题,那就是
图片大小怎么控制?
- 让用户自己压缩?这不科学
- 直接丢给后端处理?貌似也可以
- 前端压缩完后直接给后端处理?那最好不过了
跑去问前端,JavaScript
可以直接压缩后上传吗?前端答曰:不行。碰一鼻子灰,那就只能丢给后端PHP去做裁剪了。
假设用户拍了一张5M左右的图,然后直接上传,信号不好的时候,速度还是很慢的,不过这不是重点,重点是TM流量贵啊~要是失败一次,再重来,那分分钟10几M流量就没了,用户那得哭,这个可不行,这事还是得前端做。
网上Google一下,立马一大堆解决方案,内心瞬间…你懂的~
实践
Google搜索了一下结果,先讲思路,申明一个new Image()
和canvas
对象,然后通过canvas
裁剪大小,把结果赋给Image
对象。理解思路没错,但是不如直接使用成熟的库。介绍一下在Github上的一个好用的类库:localResizeIMG 。Star数有1500+,已经很好了,文档也详细,虽然不再更新了,但只要好用就好了。
代码实现如下:
- 原图大小4.2M,裁剪之后只有150k左右