概述:
是否有一种方法可以在上传之前直接通过浏览器压缩图像(多数为JPEG、PNG和GIF)?我相信JavaScript可以做到,但是我找不到实现的方法。
下面是我想要实现的完整场景:
- 用户登录我的网站,并通过
input type="file"
元素选择图像, - 通过JavaScript获取此图像,并进行某些验证,例如正确的文件格式、最大文件大小等,
- 如果一切正常,则在页面上显示图像预览,
- 用户可以进行一些基本操作,例如按照预定义比例旋转图像90°/-90°、裁剪图像,或上传另一个图像并返回第1步,
- 当用户满意时,编辑后的图像被压缩并"保存"在本地(不是保存到文件,而是在浏览器内存/页面中),
- 用户填写包含姓名、年龄等数据的表单,
- 用户点击“完成”按钮,然后将包含数据和压缩图像的表单发送到服务器(不使用AJAX),
直到最后一步,整个过程都应该在客户端完成,并且应该兼容最新版本的Chrome和Firefox、Safari 5+以及IE 8+。如果可能,只使用JavaScript(但我相信这是不可能的)。
我还没有编写任何代码,但我已经考虑过了。可以通过File API从本地读取文件,可以使用Canvas元素预览和编辑图像,但我找不到一种方法来对图像进行压缩。
根据 html5please.com 和 caniuse.com 的说法,由于 IE 浏览器的存在支持这些浏览器相当困难,但可以使用诸如 FlashCanvas 和 FileReader 等 polyfill 来实现。其实,目标是减少文件大小,因此我认为图像压缩是一个解决方案。但是,我知道上传的图像将在我的网站上显示,并且每次在同一个位置上显示,并且我知道此显示区域的尺寸(例如 200x400)。因此,我可以调整图像大小以适应这些尺寸,从而减小文件大小。我不知道这种技术的压缩比率会是多少。
你怎么看?你有什么建议告诉我吗?你知道是否有任何 JavaScript 方式在浏览器端压缩图像吗?感谢您的回复。