1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > vue 创建图片坐标点_利用vue+fabric.js获取图片坐标 并实现图片拖拽 旋转 拉伸等功能...

vue 创建图片坐标点_利用vue+fabric.js获取图片坐标 并实现图片拖拽 旋转 拉伸等功能...

时间:2020-09-28 21:21:47

相关推荐

vue 创建图片坐标点_利用vue+fabric.js获取图片坐标 并实现图片拖拽 旋转 拉伸等功能...

什么是Fabric.js?

Fabric.js是一个可以简化Canvas程序编写的库。 Fabric.js为Canvas提供所缺少的对象模型, svg parser, 交互和一整套其他不可或缺的工具。

为什么要使用Fabric.js?

Canvas提供一个好的画布能力, 但是Api不够友好。绘制简单图形其实还可以, 不过做一些复杂的图形绘制, 编写一些复杂的效果,就不是那么方便了。Fabric.js就是为此而开发,它主要就是用对象的方式去编写代码。

起步

Vue项目中引入Fabric.js

假设您的项目中正在使用ES6和Webpack,您可以开始使用Fabric.js,如下所示:

1、在命令行中:

npm install fabric(或yarn add fabric)

2、将其引入 .vue 文件中

import { fabric } from 'fabric'

3、在 .vue 的单文件中的 mounted: 生命周期里开始你的Fabric.js之旅啦

注:默认的fabric npm模块产生了相当大的包,如果Fabric.js中您有很多可能不需要的包,在这种情况下,可以在 在此处 或在命令行中构建你自己的版本。

绘制图片

1、在组件上添加一个带有id的canvas

2、初始化画布

this.canvasObj = new fabric.Canvas('c',{

preserveObjectStacking:true // 禁止选中图层时自定置于顶部

});

this.canvasObj.setWidth(this.caWidth); //设置画布宽度

this.canvasObj.setHeight(this.caHeight); //设置画布高度

3、添加图形至画布

setImage: function (imgname) {

let imgCoord = fabric.Image.fromURL(imgname, (img) => {

img.scale(1).set({

left: 150,

top: 150,

angle: -15

});

this.canvasObj.add(img).setActiveObject(img);

});

}

至此图形已经添加到画布里面去啦,接下来是要获取图形的XY坐标

通过fabric.js提供的getObjects()方法即可获取到图形对象的所有信息,fabric.js会以数组的形式按照图片先后层次将图片返回出来,在此我只需拿到图片的上右下左四个角的坐标

getImg: function () {

this.imgcoordinate = [];

let items = this.canvasObj.getObjects();

items.forEach((item, index) => {

let itemcoord = {

floorIndex: index,

tl: {

x: item.aCoords.tl.x,

y: item.aCoords.tl.y

},

tr: {

x: item.aCoords.tr.x,

y: item.aCoords.tr.y

},

bl: {

x: item.aCoords.bl.x,

y: item.aCoords.bl.y

},

br: {

x: item.aCoords.br.x,

y: item.aCoords.br.y

}

};

this.imgcoordinate.push(itemcoord);

});

}

至此就可以将图片的坐标信息全部获取到,如果需要改变图片的层次以及删除图片还可以往下看

// 移动层次

moveActive: function (index) {

let t = this.canvasObj.getActiveObject();

switch (index) {

case 0:

t.sendBackwards(); //向下一层

break;

case 1:

t.sendToBack(); //向下至底层

break;

case 2:

t.bringForward(); //向上一层

break;

case 3:

t.bringToFront(); //向上至顶层

break;

case 4:

this.canvasObj.remove(t); //删除图片

break;

default:

return

}

},

如果想要将生成图片并下载,可以将生成的图片信息绑定到一个标签,再模拟点击下载

domeLode: function(){

let url = this.canvasObj.toDataURL();

$('').attr({href:url,download:'a.png'})[0].click();

}

看下最终效果图

E3E7421C-A7DA-41a7-9E49-A6D6BD4EA197.png

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。