vue 在后端存储的图片通过url ‘http://127.0.0.1:8300/media/b002_dimension/b002_08_problemComplain/qd_car_photo/id4/id4_qd_r.png’ 可以正常在img标签中显示,在fabric.js canvas标签中无法显示,,是因为fabric.js对跨域的限制吗?如何解决呢? 是否可以通过将图片转换为base64来解决
时间: 2023-12-04 07:02:52 浏览: 106
是的,fabric.js中默认对跨域请求是有限制的,如果要在fabric.js中加载跨域图片,需要在服务器端进行跨域设置。可以在服务器端设置Access-Control-Allow-Origin响应头来允许跨域请求。具体的设置可以参考相关的跨域设置资料。
另一种解决方式是将图片转换为base64格式。可以通过使用canvas将图片绘制到canvas画布中,然后使用toDataURL方法将canvas中的图片转换为base64格式。再将base64格式的图片作为fabric.Image对象的source来加载图片。这种方法可以避免跨域问题,但是需要考虑到base64格式的图片会比原始图片文件大很多,可能会影响网页的加载速度和性能。
相关问题
如何在VUE中使用fabric.js加载保存在后端‘http://127.0.0.1:8300/media/b002_dimension/b002_08_problemComplain/qd_car_photo/id4/id4_qd_r.png’的图片,并在用户点击图片点某个位置时添加标记点
首先,你需要在Vue项目中安装fabric.js。可以使用以下命令进行安装:
```
npm install fabric --save
```
然后,在Vue组件中引入fabric.js,并创建一个canvas元素来加载图片和添加标记点。你可以使用以下代码:
```javascript
<template>
<div>
<canvas ref="canvas"></canvas>
</div>
</template>
<script>
import fabric from 'fabric';
export default {
mounted() {
const canvas = new fabric.Canvas(this.$refs.canvas);
// 加载图片
fabric.Image.fromURL('http://127.0.0.1:8300/media/b002_dimension/b002_08_problemComplain/qd_car_photo/id4/id4_qd_r.png', function(img) {
canvas.add(img);
canvas.setWidth(img.width);
canvas.setHeight(img.height);
});
// 添加标记点
canvas.on('mouse:down', function(options) {
const pointer = canvas.getPointer(options.e);
const circle = new fabric.Circle({
left: pointer.x,
top: pointer.y,
radius: 5,
fill: 'red',
selectable: false
});
canvas.add(circle);
});
}
};
</script>
```
这里的代码中,我们首先在mounted生命周期中创建了一个canvas元素,并在其中加载了图片。然后,我们通过监听canvas的mouse:down事件,在用户点击canvas时添加了一个红色的圆形标记点。
请注意,你需要将图片的地址替换为你自己后端存储的图片地址。还要注意,如果图片跨域,可能需要在后端进行相关的配置以允许跨域请求。
vue.runtime.esm.js?2b0e:619 [Vue warn]: Error in mounted hook: "TypeError: Cannot read properties of undefined (reading 'fromURL')" found in ---> <ProblemDefinition> at src/views/b002_dimension/b002_08_problemComplain/components/addProblem/problem_definition.vue <ElCollapseItem> at packages/collapse/src/collapse-item.vue <ElCollapse> at packages/collapse/src/collapse.vue <ElCard> at packages/card/src/main.vue <AddProblem> at src/views/b002_dimension/b002_08_problemComplain/AddProblem.vue <AppMain> at src/layout/components/AppMain.vue <Layout> at src/layout/index.vue <App> at src/App.vue <Root>
这个错误信息是 Vue 在 mounted 钩子中出现了异常,具体原因是因为在访问一个对象的 fromURL 属性时出现了 undefined。我们可以通过以下步骤来找到错误所在:
1. 打开浏览器的开发者工具,并切换到 Console 面板。
2. 在 Console 面板中,找到类似于 Error in mounted hook: "TypeError: Cannot read properties of undefined (reading 'fromURL')" 的错误信息,并单击其左侧的箭头,展开错误信息。
3. 查看错误信息中的堆栈跟踪信息,从上往下逐个查看,直到找到最初的错误发生位置。
在这个例子中,从错误信息中可以看出,错误发生在 problem_definition.vue 文件中,而且是因为一个对象的 fromURL 属性未定义导致的。我们可以打开这个文件,找到对应的代码位置,进一步排查错误原因。
阅读全文