UNPKG

2.36 kBJavaScriptView Raw
1const Canvas = require('./lib/canvas')
2const Image = require('./lib/image')
3const CanvasRenderingContext2D = require('./lib/context2d')
4const parseFont = require('./lib/parse-font')
5const packageJson = require('./package.json')
6const bindings = require('./lib/bindings')
7const fs = require('fs')
8const PNGStream = require('./lib/pngstream')
9const PDFStream = require('./lib/pdfstream')
10const JPEGStream = require('./lib/jpegstream')
11const DOMMatrix = require('./lib/DOMMatrix').DOMMatrix
12const DOMPoint = require('./lib/DOMMatrix').DOMPoint
13
14function createCanvas (width, height, type) {
15 return new Canvas(width, height, type)
16}
17
18function createImageData (array, width, height) {
19 return new bindings.ImageData(array, width, height)
20}
21
22function loadImage (src) {
23 return new Promise((resolve, reject) => {
24 const image = new Image()
25
26 function cleanup () {
27 image.onload = null
28 image.onerror = null
29 }
30
31 image.onload = () => { cleanup(); resolve(image) }
32 image.onerror = (err) => { cleanup(); reject(err) }
33
34 image.src = src
35 })
36}
37
38/**
39 * Resolve paths for registerFont. Must be called *before* creating a Canvas
40 * instance.
41 * @param src {string} Path to font file.
42 * @param fontFace {{family: string, weight?: string, style?: string}} Object
43 * specifying font information. `weight` and `style` default to `"normal"`.
44 */
45function registerFont (src, fontFace) {
46 // TODO this doesn't need to be on Canvas; it should just be a static method
47 // of `bindings`.
48 return Canvas._registerFont(fs.realpathSync(src), fontFace)
49}
50
51module.exports = {
52 Canvas,
53 Context2d: CanvasRenderingContext2D, // Legacy/compat export
54 CanvasRenderingContext2D,
55 CanvasGradient: bindings.CanvasGradient,
56 CanvasPattern: bindings.CanvasPattern,
57 Image,
58 ImageData: bindings.ImageData,
59 PNGStream,
60 PDFStream,
61 JPEGStream,
62 DOMMatrix,
63 DOMPoint,
64
65 registerFont,
66 parseFont,
67
68 createCanvas,
69 createImageData,
70 loadImage,
71
72 backends: bindings.Backends,
73
74 /** Library version. */
75 version: packageJson.version,
76 /** Cairo version. */
77 cairoVersion: bindings.cairoVersion,
78 /** jpeglib version. */
79 jpegVersion: bindings.jpegVersion,
80 /** gif_lib version. */
81 gifVersion: bindings.gifVersion ? bindings.gifVersion.replace(/[^.\d]/g, '') : undefined,
82 /** freetype version. */
83 freetypeVersion: bindings.freetypeVersion
84}