Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/gliffy/canvas2svg
Translates HTML5 Canvas draw commands to SVG
https://github.com/gliffy/canvas2svg
html5-canvas javascript node-canvas nodejs svg
Last synced: 12 days ago
JSON representation
Translates HTML5 Canvas draw commands to SVG
- Host: GitHub
- URL: https://github.com/gliffy/canvas2svg
- Owner: gliffy
- License: mit
- Created: 2014-01-06T23:18:15.000Z (almost 11 years ago)
- Default Branch: master
- Last Pushed: 2023-11-17T07:42:34.000Z (12 months ago)
- Last Synced: 2024-05-21T22:44:48.322Z (6 months ago)
- Topics: html5-canvas, javascript, node-canvas, nodejs, svg
- Language: JavaScript
- Homepage:
- Size: 469 KB
- Stars: 675
- Watchers: 36
- Forks: 153
- Open Issues: 45
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- stars - gliffy/canvas2svg
- awesome-canvas - canvas2svg - Translates HTML5 Canvas draw commands to SVG ![](https://img.shields.io/github/stars/gliffy/canvas2svg?style=social) ![](https://img.shields.io/github/forks/gliffy/canvas2svg?style=social) (Libraries / Data processing)
README
Canvas2Svg [![Build Status](https://travis-ci.org/gliffy/canvas2svg.svg?branch=master)](https://travis-ci.org/gliffy/canvas2svg)
==========
This library turns your Canvas into SVG using javascript. In other words, this library lets you build an SVG document
using the canvas api. Why use it?
* You have a canvas drawing you want to persist as an SVG file.
* You like exporting things.
* Because you didn't want to transform your custom file format to SVG.Demo
==========
http://gliffy.github.io/canvas2svg/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. Yay!Usage
==========
```javascript
//Create a new mock canvas context. Pass in your desired width and height for your svg document.
var ctx = new C2S(500,500);//draw your canvas like you would normally
ctx.fillStyle="red";
ctx.fillRect(100,100,100,100);
//etc...//serialize your SVG
var mySerializedSVG = ctx.getSerializedSvg(); //true here, if you need to convert named to numbered entities.//If you really need to you can access the shadow inline SVG created by calling:
var svg = ctx.getSvg();
```Tests
==========
To run tests:
```
npm install
npm test
```To run tests against Chrome and Firefox, call karma directly. This is not the default npm test due to the limited
browser selection in travis.
```
npm install karma-cli -g
karma start
```Debug
=========
Play with canvas2svg in the provided test/playground.html or run test locally in your browser in test/testrunner.htmlAdd An Example Case
=========
Add a test file to the test/example folder. In your file make sure to add the drawing function to the global `C2S_EXAMPLES`,
with your filename as a key. For example `test\example\linewidth.js` should look something like:
```javascript
window.C2S_EXAMPLES['linewidth'] = function(ctx) {
for (var i = 0; i < 10; i++){
ctx.lineWidth = 1+i;
ctx.beginPath();
ctx.moveTo(5+i*14,5);
ctx.lineTo(5+i*14,140);
ctx.stroke();
}
};
```
install gulp globally if you haven't done so already
```
npm install -g gulp
```
Then run the following to update playground.html and testrunner.html
```
gulp
```
You should now be able to select your new example from playground.html or see it run in testrunner.htmlIf you find a bug, or want to add functionality, please add a new test case and include it with your pull request.
Using with node.js
==================You can use `canvas2svg` with node.js using [jsdom](https://github.com/tmpvar/jsdom) with [node-canvas](https://github.com/Automattic/node-canvas). To do this first create a new document object, and then create a new instance of `C2S` based on that document:
```javascript
var canvas = require('canvas'),
jsdom = require('jsdom'),
C2S = require('canvas2svg');var document = jsdom.jsdom();
var ctx = new C2S({document: document});// ... drawing code goes here ...
```N.B. You may not need node-canvas for some simple operations when using jsdom >= 6.3.0, but it's still recommended that you install it.
Updates
==========
- 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 '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 releaseMisc
==========
Some canvas 2d context methods are not implemented yet. Watch out for setTransform and arcTo.Releasing
=========To release a new version:
* Run `gulp bump` to update the version number
* Add a new entry to the [Updates](#Updates) table
* `git commit -am v1.0.xx`
* `git push`
* `npm publish`License
==========
This library is licensed under the MIT license.