All Projects → federico-moretti → canvas-free-drawing

federico-moretti / canvas-free-drawing

Licence: MIT license
A JavaScript library that allows you to draw in a canvas HTML element, straightforward to use and extremely lightweight.

Programming Languages

javascript
184084 projects - #8 most used programming language
typescript
32286 projects
HTML
75241 projects

Projects that are alternatives of or similar to canvas-free-drawing

easy-drawing-board
🎨 a easy to use canvas-drawing lib
Stars: ✭ 32 (-43.86%)
Mutual labels:  drawing
vscode-excalidraw
Excalidraw integration for vscode
Stars: ✭ 31 (-45.61%)
Mutual labels:  drawing
paintDraw
A JavaScript paint and draw app.
Stars: ✭ 25 (-56.14%)
Mutual labels:  drawing
drawingwithcode
Drawing with code 😘
Stars: ✭ 28 (-50.88%)
Mutual labels:  drawing
AnyImageKit
A toolbox for pick/edit/capture photo or video. Written in Swift.
Stars: ✭ 580 (+917.54%)
Mutual labels:  drawing
VIAN
No description or website provided.
Stars: ✭ 18 (-68.42%)
Mutual labels:  drawing
voxel-builder
Voxel-based 3D modeling application
Stars: ✭ 31 (-45.61%)
Mutual labels:  drawing
lock-bitmap
A very small class to work with images faster in .net
Stars: ✭ 20 (-64.91%)
Mutual labels:  drawing
Scribble
A Beat Saber mod that allows you to draw in the scene
Stars: ✭ 28 (-50.88%)
Mutual labels:  drawing
cairo
Package cairo provides full Go bindings for Cairo, a 2D graphics library.
Stars: ✭ 28 (-50.88%)
Mutual labels:  drawing
react-map-gl-draw
React Component for Mapbox GL Draw
Stars: ✭ 50 (-12.28%)
Mutual labels:  drawing
drawim
A simple drawing library in Nim, inspired by p5js
Stars: ✭ 66 (+15.79%)
Mutual labels:  drawing
drawa-android
🎨 Drawing application for Android made easy
Stars: ✭ 16 (-71.93%)
Mutual labels:  drawing
DrawRacket4Me
DrawRacket4Me draws trees and graphs from your code, making it easier to check if the structure is what you wanted.
Stars: ✭ 43 (-24.56%)
Mutual labels:  drawing
DrawingBotV3
DrawingBotV3 is a software for creating line drawings from Images
Stars: ✭ 161 (+182.46%)
Mutual labels:  drawing
SwiftyJot
Use your finger to annotate images.
Stars: ✭ 14 (-75.44%)
Mutual labels:  drawing
vec
Vector graphics software to generate HPGL output to drive a plotter
Stars: ✭ 19 (-66.67%)
Mutual labels:  drawing
graphicsvg
Graphics library authored by Chris Schankula and Dr. Christopher Anand
Stars: ✭ 42 (-26.32%)
Mutual labels:  drawing
InfiniteCanvas
Proof of concept for a vector drawing app without canvas boundaries.
Stars: ✭ 106 (+85.96%)
Mutual labels:  drawing
ol3-drawFeatures
Plugin OpenLayers 3 for drawing features
Stars: ✭ 17 (-70.18%)
Mutual labels:  drawing

Canvas Free Drawing

Simple and straightforward package that allows you to free draw on a canvas html element.

You can try it here!

Latest Update

Complete rewrite in Typescript, even though there are no API changes, I choose to do a major version bump.

Features

  • Lightweight (~11KB minified)
  • Simplify canvas APIs
  • Bucket tool
  • Events (draw, fill, etc. )
  • Touch support
  • Undo and redo

Installing

Import as a module

npm install --save canvas-free-drawing
# or
yarn add canvas-free-drawing

or directly in the html:

<script src="canvas-free-drawing.min.js"></script>

Example

Basic usage:

<canvas id="cfd"></canvas>

<script>
  // initialize
  const cfd = new CanvasFreeDrawing({
    elementId: 'cfd',
    width: 500,
    height: 500,
  });

  // set properties
  cfd.setLineWidth(10); // in px
  cfd.setStrokeColor([0, 0, 255]); // in RGB

  // listen to events
  cfd.on({ event: 'redraw' }, () => {
    // code...
  });
</script>

API

new CanvasFreeDrawing(params: object)

Initialize the module.

Parameter Type Description
width number canvas width
elementId string html element id
height number canvas height
lineWidth number (default: 5) canvas line width
strokeColor number[3] (default: [0, 0, 0]) canvas stroke color
backgroundColor number[3] (default: [255, 255, 255]) canvas background color
disabled boolean (default: false) disable the ability to draw
showWarnings boolean (default: false) enable warning in the console
maxSnapshots number (default: 10) max number of "undos"

setLineWidth(pixels: number): void

Set line width.

setStrokeColor(color: number[3]): void

Set line color.

setDrawingColor(color: number[3]): void

Set both bucket tool color and line color.

setBackground(color: number[3], save?: boolean (default: true)): void

Set background color, if true then it will be used as background in next clear().

toggleDrawingMode(): boolean

Toggle drawing mode, returns its state.

You can also use enableDrawingMode() and disableDrawingMode().

#isDrawingModeEnabled: boolean

Property to check if drawing mode is enabled

configBucketTool(params: { color?: number[3], tolerance?: number }): void

Set bucket tool parameters, tolerance is from 0 to 100.

toggleBucketTool(): boolean

Toggle bucket tool, returns its state.

#isBucketToolEnabled: boolean

Property to check if bucket tool is enabled.

clear(): void

Clear the canvas.

save(): string

Save the canvas as base64 and returns a string - this method uses the native method toDataURL().

restore(data: string, callback: () => void): void

Restore the canvas from the string previously saved.

undo(): void

Undo last action on the canvas.

You can define the maximum undo and redo allowed with maxSnapshots in the initialization.

redo(): void

Redo last action on the canvas

Notes

Colors must be set with an array with RGB values: [0-255, 0-255, 0-255].

Events

Subscribe to an event emitter, the callback will be called when the event gets called.

on(params: { event: AllowedEvents, counter?: number }, callback: () => void): void

enum AllowedEvents {
  redraw,
  fill,
  mouseup,
  mousedown,
  mouseenter,
  mouseleave,
}

counter will debounce the events (only redraw at the moment), once every n times based on counter the event will trigger.

// this will be triggered once every 10 times the canvas actually redraw
cfd.on({ event: 'redraw', counter: 10 }, () => {
  // code...
});

Licence

MIT © Federico Moretti

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].