当前位置: 首页 > Web前端 > HTML5

Fabric.js上传本地图片到canvas背景_5

时间:2023-04-05 01:16:13 HTML5

.btn__x{显示:flex;.el-button{margin-right:20px;}}本文介绍我使用的Fabric.js版本是4.6.0。本次要实现的效果是:在本地上传一张图片,然后渲染到canvas中(作为背景图片)。我先用native方法实现一次,然后在Vue3+Element-plus环境下再实现一次。最后说说我在实际项目中的实践。需求:点击上传按钮上传图片得到图片,放到画布上进行渲染。需要注意的是,本文主要实现了上传图片并渲染到canvas上的逻辑,所以对上传文件的类型没有限制,对文件大小也没有限制。如果您在业务中需要限制文件类型,只需要添加基于本案例的限制方法即可。本文所有代码均在文末给出的仓库中。如果本文内容对你有帮助,请点个赞~原生通过获取图片路径的操作会受到浏览器安全策略的影响,所以需要处理。实现逻辑:定义上传按钮和画布(HTML部分);初始化画布;点击上传按钮获取图片地址(这里需要处理安全策略问题);获取图片路径,使用canvas.setBackgroundImage设置图片为画布背景;在canvas.setBackgroundImage的回调函数中刷新画布;

保存
以上实现方式,如果是纯前端环境,保存时背景图的地址为本地地址("blob:http://127.0.0.1:5500/383e7860-3fa5-43b9-92d9-e7165760e60b")这其实不是很好。如果其他计算机想通过反序列化来渲染它,可能会出现一些问题。如果是纯前端实现,可以将图片转成base64,然后生成背景图。fabric.Image.fromURL(imgPath,//真实图片地址img=>{//在画布上设置图片,然后重新渲染画布,图片就出来了。canvas.setBackgroundImage(img,//要设置的图片canvas.renderAll.bind(canvas)//重新渲染canvas)})element-plus中的操作我使用了vue3+element-plus。实现逻辑与native方法相同。唯一的区别是这个例子使用了el-upload组件。我将图像文件转换为base64并将其放在画布中。.btn__x{显示:flex;.el-button{margin-right:20px;}}在正式开发中在正式的项目开发中,出现以上两种情况的概率应该不大(除非你的后端小伙伴是个懒人)。先说一下上面两种情况的问题:图片路径是本地地址,保存到服务器没有意义。转成base64保存,字段可能会很大。大的。在这种情况下,放在服务器上可能没有用。127.0.0.1是你的本地电脑,你上传的图片在别人的电脑上可能看不到。这种情况问题不大,就是backgroundImage.src的值有点大。我在项目中的做法:前端上传图片到后端,将图片保存到服务器,然后返回一个图片url给前端获取图片url,然后在fabric中渲染。这样做的好处是backgroundImage.src的值被缩短了。在正式的项目中,您可能还需要考虑背景图像大小与画布大小不匹配的问题。可以参考《Fabric.js 从入门到膨胀》中的“拉伸背景图片”部分。代码仓库的native方法在Vue3+Element-plus中实现推荐阅读《Fabric.js 从入门到膨胀》《Fabric.js 渐变效果(包括径向渐变)》《Fabric.js 3个api设置画布宽高》《Fabric.js 自定义右键菜单》《Fabric.js 更换图片的3种方法(包括更换分组内的图片,以及存在缓存的情况)》如果本文内容对你有帮助,请点个赞~点赞+关注+收藏=学习了