144 lines
4.5 KiB
Markdown
144 lines
4.5 KiB
Markdown
# SVGCanvas
|
|
|
|
Draw on SVG using Canvas's 2D Context API.
|
|
A maintained fork of [gliffy's canvas2svg](https://github.com/gliffy/canvas2svg).
|
|
|
|
## Demo
|
|
|
|
https://zenozeng.github.io/svgcanvas/test/
|
|
|
|
## How it works
|
|
|
|
We create a mock 2d canvas context. Use the canvas context like you would on a normal canvas. As you call methods, we build up a scene graph in SVG.
|
|
|
|
## Usage
|
|
|
|
```javascript
|
|
import { Context } from 'svgcanvas'
|
|
|
|
const ctx = new Context(500, 500);
|
|
|
|
// draw your canvas like you would normally
|
|
ctx.fillStyle = "red";
|
|
ctx.fillRect(100, 100, 100, 100);
|
|
|
|
// serialize your SVG
|
|
const mySerializedSVG = ctx.getSerializedSvg();
|
|
```
|
|
|
|
Wrapping canvas elements:
|
|
|
|
```javascript
|
|
import { Context, Element } from 'svgcanvas';
|
|
|
|
const canvas = document.createElement("canvas");
|
|
const context2D = canvas.getContext("2d");
|
|
|
|
// more options to pass into constructor:
|
|
const options = {
|
|
height: 2000, // falsy values get converted to 500
|
|
width: 0 / 0, // falsy values get converted to 500
|
|
ctx: context2D, // existing Context2D to wrap around
|
|
enableMirroring: false, // whether canvas mirroring (get image data) is enabled (defaults to false)
|
|
document: undefined, // overrides default document object
|
|
}
|
|
|
|
// Creates a mock canvas context (mocks `context2D` above)
|
|
const ctx = new Context(options);
|
|
|
|
// draw your canvas like you would normally
|
|
ctx.fillStyle = "red";
|
|
ctx.fillRect(100, 100, 100, 100);
|
|
|
|
ctx.getSerializedSvg(); // returns the serialized SVG
|
|
ctx.getSvg(); // returns the inline svg element
|
|
|
|
// Creates a mock canvas element (mocks `canvas` above)
|
|
const dom = new Element(options);
|
|
dom.ctx; // the internal context, via `new Context(options)`
|
|
dom.wrapper; // a div with the svg as a child
|
|
dom.svg; // the inline svg element
|
|
```
|
|
|
|
## Tests
|
|
|
|
https://zenozeng.github.io/p5.js-svg/test/
|
|
|
|
## CHANGELOG
|
|
|
|
### v2.2.2
|
|
|
|
- Delegate getAttribute/setAttribute ([Validark](https://github.com/Validark)) [#8](https://github.com/zenozeng/svgcanvas/pull/8)
|
|
|
|
### v2.2.1
|
|
|
|
- fix(SVGCanvasElement): addEventListener
|
|
|
|
### v2.2.0
|
|
|
|
- feat: Context.prototype.getImageData (experimental) for https://github.com/gliffy/canvas2svg/issues/3 and https://github.com/zenozeng/p5.js-svg/issues/203
|
|
|
|
### v2.1.0
|
|
|
|
- feat: SVGCanvasElement(options)
|
|
- feat: options.debug
|
|
- refactor
|
|
|
|
### v2.0.7
|
|
|
|
- fix typo
|
|
- rollup 2.67.0
|
|
|
|
### v2.0.6
|
|
|
|
- utils.toString for https://github.com/zenozeng/p5.js-svg/issues/204
|
|
|
|
### v2.0.5
|
|
|
|
- Fix adding CanvasPattern ([Xavier Delamotte](https://github.com/x4d3)) [#7](https://github.com/zenozeng/svgcanvas/pull/7)
|
|
|
|
### v2.0.4
|
|
|
|
- fix: push/pop transformMatrixStack when save/restore, for https://github.com/zenozeng/p5.js-svg/issues/191
|
|
|
|
### v2.0.3
|
|
|
|
- feat: sync element's width and height to context
|
|
|
|
### v2.0.2
|
|
|
|
- feat: Implement CanvasTransform Interface, https://github.com/gliffy/canvas2svg/pull/83
|
|
- feat: ClearCanvas in fillRect
|
|
- feat: Element API
|
|
- feat: ESM
|
|
- fix: Recreate root `<g>` when __clearCanvas to remove all attributes
|
|
- chore: Bundle JavaScript using Rollup
|
|
- chore: GitHub Actions
|
|
|
|
### v1.x
|
|
|
|
- v1.0.19 Fix __parseFont to not crash
|
|
- v1.0.18 clip was not working, the path never made it to the clip area
|
|
- v1.0.17 Fix bug with drawing in an empty context. Fix image translation problem. Fix globalAlpha issue.
|
|
- v1.0.16 Add npm publishing support, bower file and optimize for arcs with no angles.
|
|
- v1.0.15 Setup travis, add testharness and debug playground, and fix regression for __createElement refactor
|
|
- v1.0.14 bugfix for gradients, move __createElement to scoped createElement function, so all classes have access.
|
|
- v1.0.13 set paint order before stroke and fill to make them behavior like canvas
|
|
- v1.0.12 Implementation of ctx.prototype.arcTo.
|
|
- v1.0.11 call lineTo instead moveTo in ctx.arc, fixes closePath issue and straight line issue
|
|
- v1.0.10 when lineTo called, use M instead of L unless subpath exists
|
|
- v1.0.9 use currentDefaultPath instead of <path>'s d attribute, fixes stroke's different behavior in SVG and canvas.
|
|
- v1.0.8 reusing __createElement and adding a properties undefined check
|
|
- v1.0.7 fixes for multiple transforms and fills and better text support from stafyniaksacha
|
|
- v1.0.6 basic support for text baseline (contribution from KoKuToru)
|
|
- v1.0.5 fixes for #5 and #6 (with contributions from KoKuToru)
|
|
- v1.0.4 generate ids that start with a letter
|
|
- v1.0.3 fixed #4 where largeArcFlag was set incorrectly in some cases
|
|
- v1.0.2 Split up rgba values set in fill/stroke to allow illustrator import support.
|
|
- v1.0.1 Allow C2S to be called as a function. https://github.com/gliffy/canvas2svg/issues/2
|
|
- v1.0.0 Initial release
|
|
|
|
## License
|
|
|
|
This library is licensed under the MIT license.
|