先说背景:工作中遇到一个问题,file组件上传图片,file是可以上传n张图片;但是,后台逻辑历史原因,只能展现一张。因此:考虑到成本,决定在前端将多张图片合并成一张给后端。
先上代码
1 | _mergeImage2Canvas:function() { |
合成效果
图片一:小站logo
合成效果:
原理简介
主要是通过canvas 获取多个图片的base64编码,之后通过drawImage 函数合并和toDataUrl的方式合成。
问题思考
- 问题一:必须支持canvas,否则还需要后台统一跑脚本处理。
- 问题二:性能消耗过大。append img 和base64代码对dom的消耗都挺大,尤其是在移动端,很容易造成崩溃。解决办法:设定最大宽度,将图片等比缩放,这样子就少了向dom扩展元素这部分的损耗。
- 问题三:base64 在传输上性能消耗也挺大,没有file原生的好。
因此:出了必须前端搞定,最好的方式,还是在后台跑脚本运行合并。