0.0.8-alpha • Published 9 months ago
paper-pen v0.0.8-alpha
paper-pen.js
canvas、 annotation、annotate、Rect、Polygon、Line、Dot、Text、Matrix.
- Quick start
npm i paper-pen --save
<script src='https://unpkg.com/paper-pen@0.0.5/dist/paper-pen.esm.min.js'></script>
features (待实现)
- mask 超像素标注
- group 编组
- text editor
demo
//demo.html
<canvas id='c'></canvas>
// demo.js
import { Canvas } from 'paper-pen'
let paperPen = new Canvas(
'#c', // id 、class string (#c, .c)| HTMLCanvasElement
{ // options
width: 1600, // canvas width
height: 700, // canvas height
preventDefault: true, // prevent right click
selection: true, // can or not renderTop
skipFindTarget: false // skip find target, default false
}
)
paperPen.setBackground('Your Image Url') // set background
paperPen.on('img:load', () => {
// do anything
})Now you hava a
1600 * 700canvas and set a background image for it.
- 是否开启滚轮缩放 (Whether to enable wheel scaling)
wheel: {scale: true}
import { Canvas } from 'paper-pen'
let canvas = new Canvas({
'#c',
{
wheel: {
scale: true, // 开启此项,会使滚轮支持画布缩放
scroll: true, // 开启此项,会使鼠标滚轮在画布中禁用滚动条
}
}
})- 是否开启鼠标右键拖动画布(Do you want to enable the right mouse button to drag the canvas)
rightMove: true
import { Canvas } from 'paper-pen'
let canvas = new Canvas({
'#c',
{
rightMove: true
}
})How to draw other shape(Rect、Polygon、Line、Point、and so on.)
- For example --- Rect
import { Rect, Polygon } from 'paper-pen' let rect = new Rect({ left: 300, top: 300, width: 100, height: 100, stroke: '#000', opacity: 0.5 }) paperPen.add(rect) let poly = new Polygon({ points: [{x: 100, y: 100}, {x: 200, y:100}, {x:150, y: 350}], stroke: '#0f0', opacity: .5, fill: '#00f', lineWidth: 5 }) paperPen.add(poly)Now you get a Rect
this Library provide (Rect、Polygon、Line、Point、CrossLine、Text、Ruler、Arrow), Of course you can custom other Shapes by this Library.
API
- class
need to call with 'new'
new Rect()new Line()...
| name | description |
|---|---|
| Canvas | Canvas Instance |
| Rect | draw Rectangle, Instance |
| Polygon | draw Polygon, Instance |
| Point | draw Point, Instance |
| Line | draw Line, Instance |
| CrossLine | draw CrossLine, Instance |
| Text | draw Text, Instance |
| Ruler | draw Ruler, Instance |
| Arrow | draw Arrow, Instance |
| Matrix | Matrix transform |
- Canvas properties
| name | type | description |
|---|---|---|
| width | number | canvas width |
| height | number | canvas height |
| skipFindTarget | boolean | skip find element |
| preventDefault | boolean | prevent right click |
| selection | boolean | can or not renderTop |
| transformMatrix | object | matrix {a,b,c,d,e,f} |
| _objects | array | shape, shape |
| imageFillMode | string | 'contain'、'cover',针对backgroundImage |
| wheel | object | 鼠标滚轮相关 |
| wheel.scale | boolean | 是否开启滚轮缩放,default false |
| wheel.scroll | boolean | 是否缩放时禁用浏览器滚动条 default false |
| wheel.max | number | 缩放最大范围 |
| wheel.min | number | 缩放最小范围 |
| rightMove | boolean | 右键移动画布 default false |
- shape common properties
| name | type | description | |
|---|---|---|---|
| stroke | string | canvas strokeStyle | |
| fill | string | canvas fillStyle | |
| lineWidth | number | lineWidth | |
| opacity | number | 0-1 globalAlpha | |
| cornerSize | number | ||
| cornerStyle | string | 'square | circle' |
| cornerBorderColor | string | color | |
| cornerColor | string | ||
| cornerOpacity | number | 0 - 1 | |
| lockMove | boolean | ||
| displayGraph | boolean | 用来决定是否显示当前图形default true | |
| needControl | boolean | 是否显示控制点 default true |
- shape common methods
| name | type | description |
|---|---|---|
| getBoundingBox | 获取包围盒 | |
| getCommonConfig | 获取控制点默认配置 |
- rect properties
| name | type | description |
|---|---|---|
| left | number | |
| top | number | |
| width | number | width |
| height | number | height |
-polygon properties
| name | type | description |
|---|---|---|
| points | Array<{x: number, y: number}> | |
| needArrow | boolean | 是否需要起始箭头 |
| needCenterControl | boolean | 是否需要线段中点 |
| centerPointsStyle | string | 'square'| 'circle' 中点样式 |
| centerPointsSize | number | 中点大小 |
| centerPointsStroke | string | 中点描边颜色 |
| centerPointsFill | string | 中点填充颜色 |
- instance methods
| name | description | parameter | return |
|---|---|---|---|
| setBackground | set canvas background | imgUrl|Image|Video|Canvas|bitmap | |
| getPointer | Obtain the coordinates of the mouse on the canvas | null | {x number, y:number} |
| add | Add elements to object list | DrawObject | |
| remove | remove elements from object list | DrawObject | |
| setActiveObject | set the current object to active | DrawObject | |
| setCursor | set the cursor of canvas | css cursor | |
| resetActive | Deactivate all objects | null | |
| toJSON | get all elements on the canvas | null | {},{} |
| requestRenderAll | clear all Objects on the canvas, draw all objects on the canvas | null | |
| toDataUrl | 将画布转换为图片(Convert Canvas to Pictures) | null | {imgData, imgUrl} |
| toBitMap | 将画布转换为单通道位图(Convert the canvas to a single channel bitmap) | {r:number,g: number,b:number,a?:number},...|null | new Promise (ImageBitmap) 不传参数,默认转为二值图(黑白) |
| off | 卸载指定事件 | (事件名称,回调函数) | |
| offAll | 卸载监听事件, 不传参,卸载所有实例监听事件 | 事件名称,如:'mouse:down',将会卸载所有的mouse:down事件 |
- eventListener
| name | description | callback |
|---|---|---|
| mouse:down | 鼠标按下事件 | |
| mouse:move | 鼠标移动事件 | |
| mouse:wheel | 鼠标滚轮事件 | |
| mouse:up | 鼠标抬起事件 | |
| img:load | 当背景图是在线地址时,等图片加载完成后的回调 | |
| render:before | 画布元素渲染前 | |
| render:after | 画布元素渲染后 | |
| obj:add | 元素被添加到画布后 | |
| obj:remove | 元素从画布中删除后 | |
| obj:edit | 元素被编辑后 | |
| obj:move | 元素被移动后 |
// paper-pen为开发者提供了mouse:down 、mouse:move、mouse:up、img:load、after:render事件回调。
paperPen.on('mouse:down', opt => {
let pos = paperPen.getPointer(opt) // 获取鼠标按下的点映射到当前画布的真实坐标位置。
console.log(pos)
// 您能在此处做想要做的业务。
})
paperPen.off('mouse:down') // 此方法会去掉画布上所有的mouse:down事件, 最好指定第二个参数来删除对应的事件。
paperPen.on('mouse:down', handleMouseDown)
paperPen.off('mouse:down', handleMouseDown)- Matrix, Support chain operation(支持链式操作)
| name | decription | params | type |
|---|---|---|---|
| translate | translate matrix | x , y | number |
| scale | Multiples corresponding to x-axis and y-axis scaling | x, y | number |
| scaleU | scale Matrix | scaler | number |
| rotate | rotate matrix | radian | number |
| transform | transform matrix | a,b,c,d,e,f | number |
| applyToPoint | Apply the current matrix to point | x, y | number |
import { Matrix } from 'paper-pen'
let mat = new Matrix() /*
默认生成单位矩阵
1, 0, 0,
0, 1, 0,
0, 0, 1
*/
mat.translate(10, 10) // (1, 0, 0, 1, 10, 10) 返回新的矩阵
mat.translate(100, 100).scale(1.5, 2) // 这里的换算都是用矩阵的叉乘。0.0.8-alpha
9 months ago
0.0.7
9 months ago
0.0.7-release
2 years ago
0.0.7-alpha
2 years ago
0.0.6
2 years ago
0.0.5
2 years ago
0.0.4
2 years ago
0.0.3
2 years ago
0.0.2
2 years ago
0.0.1
2 years ago