fabric.js和高级画板

本文介绍fabric.js框架使用,以及使用fabricjs打造一个高级画板程序.

高级画板功能介绍

  • 全局绘制颜色选择
  • 护眼模式、网格模式切换
  • 自由绘制
  • 画箭头
  • 画直线
  • 画虚线
  • 画圆/椭圆/矩形/直角三角形/普通三角形/等边三角形
  • 文字输入
  • 图片展示及相关移动、缩放等操作
  • 删除功能

(文末附:画板GitHub地址&fabric.js使用秘籍)

功能截图如下:

动态效果图:

 

fabric.js介绍

fabric.js是什么
fabric.js是可以简化canvas编写的js库,提供canvas缺少的对象模型,包含动画、数据序列号和反序列化的等高级功能的js库,开源项目,在GitHub有很多人贡献。


fabric.js优缺点
优点:fabric提供超好的画布能力.
缺点:api超级烂,没有相应的demo代码,上手难度较大.

 

fabric.js使用笔记

对象

fabric.Circle 圆
fabric.Ellipse 椭圆
fabric.Line 直线
fabric.Polygon
fabric.Polyline
fabric.Rect 矩形
fabric.Triangle 三角形

 

方法

add(object) 添加
insertAt(object,index) 添加
remove(object) 移除
forEachObject 循环遍历
getObjects() 获取所有对象
item(int) 获取子项
isEmpty() 判断是否空画板
size() 画板元素个数
contains(object) 查询是否包含某个元素
fabric.util.cos
fabric.util.sin
fabric.util.drawDashedLine 绘制虚线
getWidth() setWidth()
getHeight()
clear() 清空
renderAll() 重绘
requestRenderAll() 请求重新渲染
rendercanvas() 重绘画板
getCenter().top/left 获取中心坐标
toDatalessJSON() 画板信息序列化成最小的json
toJSON() 画板信息序列化成json
moveTo(object,index) 移动
dispose() 释放
setCursor() 设置手势图标
getSelectionContext()获取选中的context
getSelectionElement()获取选中的元素
getActiveObject() 获取选中的对象
getActiveObjects() 获取选中的多个对象
discardActiveObject()取消当前选中对象
isType() 图片的类型
setColor(color) = canvas.set("full","");
rotate() 设置旋转角度
setCoords() 设置坐标

 

事件

object:added
object:removed
object:modified
object:rotating
object:scaling
object:moving
object:selected 这个方法v2已经废弃,使用selection:created替代,多选不会触发
before:selection:cleared
selection:cleared
selection:updated
selection:created
path:created
mouse:down
mouse:move
mouse:up
mouse:over
mouse:out
mouse:dblclick

 

常用属性

canvas.isDrawingMode = true; 可以自由绘制
canvas.selectable = false; 控件不能被选择,不会被操作
canvas.selection = true; 画板显示选中
canvas.skipTargetFind = true; 整个画板元素不能被选中
canvas.freeDrawingBrush.color = "#E34F51" 设置自由绘画笔的颜色
freeDrawingBrush.width 自由绘笔触宽度

 

IText的方法

selectAll() 选择全部
getSelectedText() 获取选中的文本
exitEditing() 退出编辑模式

 

绘制直线

var line = new fabric.Line([10, 10, 100, 100], {
fill: 'green',
stroke: 'green',    //笔触颜色
strokeWidth: 2,//笔触宽度
});
canvas.add(line);

 

绘制虚线

在绘制直线的基础上添加属性strokeDashArray:Array
example:

var line = new fabric.Line([10, 10, 100, 100], {
fill: 'green',
stroke: 'green',
strokeDashArray:[3,1] 
});
canvas.add(line);

strokeDashArray[a,b] =》 每隔a个像素空b个像素。

 

图片去掉选中边框和旋转,且只能移动,不可操作

oImg.hasControls = false; 只能移动不能(编辑)操作
oImg.hasBorders = false; 去掉边框,可以正常操作
hasRotatingPoint = false; 不能被旋转
hasRotatingPoint 控制旋转点不可见

fabric.Image.fromURL("300.jpg", function (oImg) {
canvas.add(oImg);
oImg.hasControls = oImg.hasBorders = false;
});

 

福利环节

简易画板程序GitHub地址:https://github.com/vipstone/drawingboard

fabric.js使用秘籍:https://github.com/vipstone/drawingboard/blob/master/fabricjs%E4%BD%BF%E7%94%A8%E7%AC%94%E8%AE%B0.md

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/546977.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python模块学习——tempfile

主要有以下几个函数: tempfile.TemporaryFile 如何你的应用程序需要一个临时文件来存储数据,但不需要同其他程序共享,那么用TemporaryFile函数创建临时文件是最好的选择。其他的应用程序是无法找到或打开这个文件的,因为它并没有…

不同网段通过静态路由实现互通,华为S5700交换机开启telnet远程指定IP登陆配置(强烈推荐)

首先,不同网段通过静态路由实现互通配置方法,参考不同网段通过静态路由实现互通 在以上基础上,还需要配置 一、配置S5700交换机。 1.交换机开启Telnet服务 <Huawei>system-view Enter system view, return user view with Ctrl+Z. [Huawei]sysname LSW4 [

如何系统学习python

前言 最早接触python的时候&#xff0c;他并没有现在这么火&#xff0c;我也没把他太当回事&#xff0c;那时候我对python的印象就是给运维人员使用的一门很古老的语言&#xff0c;显然随着tensorflow&#xff08;以下简称tf&#xff09;的兴起&#xff0c;python开始频繁的进入…

Centos7.x Hadoop 3.x HDFS 写入文件

操作目的 1、在Linux环境下 编写HDFS写文件程序的java文件 2、编译并打包HDFS的写程序 3、执行HDFS的写程序 环境、工具说明 1、先搭建一个 Hadoop 的基础集群环境 参考&#xff1a;Hadoop集群搭建 2、JDK版本&#xff1a;jdk1.8 安装配置过程 3、工具&#xff1a;xshell5 4、…

不同网段通过静态路由实现互通,华为S5700交换机开启SSH远程指定IP登陆配置(强烈推荐)

首先,不同网段通过静态路由实现互通配置方法,参考不同网段通过静态路由实现互通 在以上基础上,还需要配置 一、配置S5700交换机。 1.交换机开启stelnet服务 <Huawei>system-view Enter system view, return user view with Ctrl+Z. [Huawei]sysname LSW4 [

mysql线程缓存和表缓存

一.线程缓存1.thread_cache_size定义了线程缓冲中的数量.每个缓存中的线程通常消耗256kb内存2.Threads_cached,可以看到已经建立的线程二.表缓存(table_cache)1.表缓存有点以myisam为中心2.在mysql5.1中,这个变量被分为两部分.表缓存分为两个部分:一部分为打开表,一部分为定义表…

图片人脸检测——OpenCV版(二)

图片人脸检测 人脸检测使用到的技术是OpenCV&#xff0c;上一节已经介绍了OpenCV的环境安装&#xff0c;点击查看. 功能展示 识别一种图上的所有人的脸&#xff0c;并且标出人脸的位置&#xff0c;画出人眼以及嘴的位置&#xff0c;展示效果图如下&#xff1a; 多张脸识别效果图…

wordpress for sae建站全过程

为什么80%的码农都做不了架构师&#xff1f;>>> 文章链接 http://www.brighttj.com/wordpress/use-wordpress-for-sae/ 里面详细的介绍了整个博客网站搭建的过程。多捧场。 转载于:https://my.oschina.net/saitjr/blog/197592

Tesseract Ocr文字识别

Tesseract的OCR引擎最先由HP实验室于1985年开始研发&#xff0c;至1995年时已经成为OCR业内最准确的三款识别引擎之一。2005年&#xff0c;Tesseract由美国内华达州信息技术研究所获得&#xff0c;并求诸于Google对Tesseract进行改进、消除Bug、优化工作。Tesseract目前已作为开…

jenkins用ssh agent插件在pipeline里实现scp和远程执行命令

现在ssh agent的认证&#xff0c;已不支持明文用户密码&#xff0c;而只能用加密方式实现。 所以我先在jenknis和nginx服务器之后&#xff0c;实现ssh免密码rsa证书登陆。 私钥放jenkins&#xff0c;公钥放nginx。然后&#xff0c;将私钥拿出来&#xff0c;后面要写入jenkins…

QT5 获取窗口、系统屏幕大小尺寸信息,Qt 获取控件位置坐标,屏幕坐标,相对父窗体坐标

一、QT5 获取窗口大小尺寸信息 QT窗口尺寸&#xff0c;窗口大小和大小改变引起的事件 QResizeEvent。 //窗口左上角的位置(含边框)qDebug() << this->frameGeometry().x() << this->frameGeometry().y() << ;//1qDebug() << this->x() <…

nutch,hbase,zookeeper兼容性问题

nutch-2.1使用gora-0.2.1&#xff0c; gora-0.2.1使用hbase-0.90.4&#xff0c;hbase-0.90.4和hadoop-1.1.1不兼容&#xff0c;hbase-0.94.4和gora-0.2.1不兼容&#xff0c;hbase-0.92.2没问题。 由川哥的博客的这段话可以知道&#xff0c;nutch-2.1 hadoop 1.1.1 hbase-0.92.…

视频人脸检测——OpenCV版(三)

视频人脸检测是图片人脸检测的高级版本&#xff0c;图片检测详情点击查看我的上一篇《图片人脸检测——OpenCV版&#xff08;二&#xff09;》 实现思路&#xff1a; 调用电脑的摄像头&#xff0c;把摄像的信息逐帧分解成图片&#xff0c;基于图片检测标识出人脸的位置&#x…

JENKINS使用DOCKER运行PYTEST并且出ALLURE报告

背景 最近想做一个简单的pytest 测试&#xff0c;用allure出报告&#xff0c;结果发现网上的方法都是在windows上装jenkins,然后用jenkins跑一个本地的运行环境。这种做法明显很不2019年。于是我决定做一个在jenkins上使用docker运行pytest&#xff0c;然后再出allure报告的文…

配置设备作为DHCP 服务器(基于接口地址池)

DHCP 服务器简介: 通常用户希望网络中的每台终端能够动态获取IP地址、DNS服务器的IP地址、路由信 息、网关信息等网络参数,不需要手动配置终端的IP地址等网络参数;另外,针对一 些移动终端(手机、ipad、办公笔记本等)希望能够即插即用,不需要每次修改终端 的IP等网络参数…

zabbix企业应用之low level discovery监控mysql

之前介绍了使用zabbix监控固定3306端口的mysql&#xff08;文章地址为http://dl528888.blog.51cto.com/2382721/1346590&#xff09;&#xff0c;有个不好的地方是只能监控固定的3306端口&#xff0c;如果是非3306端口的话&#xff0c;需要修改模板&#xff0c;如果主机有多个m…

图片人脸检测——Dlib版(四)

上几篇给大家讲了OpenCV的图片人脸检测&#xff0c;而本文给大家带来的是比OpenCV更加精准的图片人脸检测Dlib库。 往期目录 视频人脸检测——Dlib版&#xff08;六&#xff09;OpenCV添加中文&#xff08;五&#xff09;图片人脸检测——Dlib版&#xff08;四&#xff09;视频…

配置设备作为DHCP 服务器(基于全局地址池)

DHCP 服务器简介: 通常用户希望网络中的每台终端能够动态获取IP地址、DNS服务器的IP地址、路由信 息、网关信息等网络参数,不需要手动配置终端的IP地址等网络参数;另外,针对一 些移动终端(手机、ipad、办公笔记本等)希望能够即插即用,不需要每次修改终端 的IP等网络参数…

kubernetes 实战 使用 nfs 作为动态 storageClass 存储

kubernetes 实战 使用 nfs 作为动态 storageClass 存储 概述 之前有介绍过 Kubernetes 实战 pv and pvc&#xff0c; 相信使用过的pv和pvc的同学或者有过虚拟化经验的人来说肯定会想到很多问题&#xff0c;比如每次申请 pvc 都需要手动添加pv&#xff0c;这岂不是太不方便了。那…

OpenCV环境搭建(一)

OpenCV环境搭建 环境搭建为OpenCV的python&#xff08;一下简称py&#xff09;开发环境搭建&#xff0c;建立在py3的环境和语法上实现的。 windows系统搭建 系统环境&#xff1a;windows 10 python 3.6 OpenCV 3.4.1 一、安装python python的安装之前在python自学笔记的项…