@shqld/canvas 3.2.2-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/Readme.md +654 -0
  2. package/binding.gyp +229 -0
  3. package/browser.js +31 -0
  4. package/index.d.ts +507 -0
  5. package/index.js +94 -0
  6. package/lib/DOMMatrix.js +678 -0
  7. package/lib/bindings.js +113 -0
  8. package/lib/canvas.js +113 -0
  9. package/lib/context2d.js +11 -0
  10. package/lib/image.js +97 -0
  11. package/lib/jpegstream.js +41 -0
  12. package/lib/pattern.js +15 -0
  13. package/lib/pdfstream.js +35 -0
  14. package/lib/pngstream.js +42 -0
  15. package/package.json +77 -0
  16. package/scripts/install.js +19 -0
  17. package/src/Backends.h +9 -0
  18. package/src/Canvas.cc +1026 -0
  19. package/src/Canvas.h +128 -0
  20. package/src/CanvasError.h +37 -0
  21. package/src/CanvasGradient.cc +113 -0
  22. package/src/CanvasGradient.h +20 -0
  23. package/src/CanvasPattern.cc +129 -0
  24. package/src/CanvasPattern.h +33 -0
  25. package/src/CanvasRenderingContext2d.cc +3527 -0
  26. package/src/CanvasRenderingContext2d.h +238 -0
  27. package/src/CharData.h +233 -0
  28. package/src/FontParser.cc +605 -0
  29. package/src/FontParser.h +115 -0
  30. package/src/Image.cc +1719 -0
  31. package/src/Image.h +146 -0
  32. package/src/ImageData.cc +138 -0
  33. package/src/ImageData.h +26 -0
  34. package/src/InstanceData.h +12 -0
  35. package/src/JPEGStream.h +157 -0
  36. package/src/PNG.h +292 -0
  37. package/src/Point.h +11 -0
  38. package/src/Util.h +9 -0
  39. package/src/bmp/BMPParser.cc +459 -0
  40. package/src/bmp/BMPParser.h +60 -0
  41. package/src/bmp/LICENSE.md +24 -0
  42. package/src/closure.cc +52 -0
  43. package/src/closure.h +98 -0
  44. package/src/color.cc +796 -0
  45. package/src/color.h +30 -0
  46. package/src/dll_visibility.h +20 -0
  47. package/src/init.cc +114 -0
  48. package/src/register_font.cc +352 -0
  49. package/src/register_font.h +7 -0
  50. package/util/has_lib.js +119 -0
  51. package/util/win_jpeg_lookup.js +21 -0
package/index.d.ts ADDED
@@ -0,0 +1,507 @@
1
+ // TypeScript Version: 3.0
2
+
3
+ import { Readable } from 'stream'
4
+
5
+ export interface PngConfig {
6
+ /** Specifies the ZLIB compression level. Defaults to 6. */
7
+ compressionLevel?: 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
8
+ /**
9
+ * Any bitwise combination of `PNG_FILTER_NONE`, `PNG_FILTER_SUB`,
10
+ * `PNG_FILTER_UP`, `PNG_FILTER_AVG` and `PNG_FILTER_PATETH`; or one of
11
+ * `PNG_ALL_FILTERS` or `PNG_NO_FILTERS` (all are properties of the canvas
12
+ * instance). These specify which filters *may* be used by libpng. During
13
+ * encoding, libpng will select the best filter from this list of allowed
14
+ * filters. Defaults to `canvas.PNG_ALL_FILTERS`.
15
+ */
16
+ filters?: number
17
+ /**
18
+ * _For creating indexed PNGs._ The palette of colors. Entries should be in
19
+ * RGBA order.
20
+ */
21
+ palette?: Uint8ClampedArray
22
+ /**
23
+ * _For creating indexed PNGs._ The index of the background color. Defaults
24
+ * to 0.
25
+ */
26
+ backgroundIndex?: number
27
+ /** pixels per inch */
28
+ resolution?: number
29
+ }
30
+
31
+ export interface JpegConfig {
32
+ /** Specifies the quality, between 0 and 1. Defaults to 0.75. */
33
+ quality?: number
34
+ /** Enables progressive encoding. Defaults to `false`. */
35
+ progressive?: boolean
36
+ /** Enables 2x2 chroma subsampling. Defaults to `true`. */
37
+ chromaSubsampling?: boolean
38
+ }
39
+
40
+ export interface PdfConfig {
41
+ title?: string
42
+ author?: string
43
+ subject?: string
44
+ keywords?: string
45
+ creator?: string
46
+ creationDate?: Date
47
+ modDate?: Date
48
+ }
49
+
50
+ export interface NodeCanvasRenderingContext2DSettings {
51
+ alpha?: boolean
52
+ pixelFormat?: 'RGBA32' | 'RGB24' | 'A8' | 'RGB16_565' | 'A1' | 'RGB30'
53
+ }
54
+
55
+ export class Canvas {
56
+ width: number
57
+ height: number
58
+
59
+ /** _Non standard._ The type of the canvas. */
60
+ readonly type: 'image'|'pdf'|'svg'
61
+
62
+ /** _Non standard._ Getter. The stride used by the canvas. */
63
+ readonly stride: number;
64
+
65
+ /** Constant used in PNG encoding methods. */
66
+ static readonly PNG_NO_FILTERS: number
67
+ /** Constant used in PNG encoding methods. */
68
+ static readonly PNG_ALL_FILTERS: number
69
+ /** Constant used in PNG encoding methods. */
70
+ static readonly PNG_FILTER_NONE: number
71
+ /** Constant used in PNG encoding methods. */
72
+ static readonly PNG_FILTER_SUB: number
73
+ /** Constant used in PNG encoding methods. */
74
+ static readonly PNG_FILTER_UP: number
75
+ /** Constant used in PNG encoding methods. */
76
+ static readonly PNG_FILTER_AVG: number
77
+ /** Constant used in PNG encoding methods. */
78
+ static readonly PNG_FILTER_PAETH: number
79
+
80
+ constructor(width: number, height: number, type?: 'image'|'pdf'|'svg')
81
+
82
+ getContext(contextId: '2d', contextAttributes?: NodeCanvasRenderingContext2DSettings): CanvasRenderingContext2D
83
+
84
+ /**
85
+ * For image canvases, encodes the canvas as a PNG. For PDF canvases,
86
+ * encodes the canvas as a PDF. For SVG canvases, encodes the canvas as an
87
+ * SVG.
88
+ */
89
+ toBuffer(cb: (err: Error|null, result: Buffer) => void): void
90
+ toBuffer(cb: (err: Error|null, result: Buffer) => void, mimeType: 'image/png', config?: PngConfig): void
91
+ toBuffer(cb: (err: Error|null, result: Buffer) => void, mimeType: 'image/jpeg', config?: JpegConfig): void
92
+
93
+ /**
94
+ * For image canvases, encodes the canvas as a PNG. For PDF canvases,
95
+ * encodes the canvas as a PDF. For SVG canvases, encodes the canvas as an
96
+ * SVG.
97
+ */
98
+ toBuffer(): Buffer
99
+ toBuffer(mimeType: 'image/png', config?: PngConfig): Buffer
100
+ toBuffer(mimeType: 'image/jpeg', config?: JpegConfig): Buffer
101
+ toBuffer(mimeType: 'application/pdf', config?: PdfConfig): Buffer
102
+
103
+ /**
104
+ * Returns the unencoded pixel data, top-to-bottom. On little-endian (most)
105
+ * systems, the array will be ordered BGRA; on big-endian systems, it will
106
+ * be ARGB.
107
+ */
108
+ toBuffer(mimeType: 'raw'): Buffer
109
+
110
+ createPNGStream(config?: PngConfig): PNGStream
111
+ createJPEGStream(config?: JpegConfig): JPEGStream
112
+ createPDFStream(config?: PdfConfig): PDFStream
113
+
114
+ /** Defaults to PNG image. */
115
+ toDataURL(): string
116
+ toDataURL(mimeType: 'image/png'): string
117
+ toDataURL(mimeType: 'image/jpeg', quality?: number): string
118
+ /** _Non-standard._ Defaults to PNG image. */
119
+ toDataURL(cb: (err: Error|null, result: string) => void): void
120
+ /** _Non-standard._ */
121
+ toDataURL(mimeType: 'image/png', cb: (err: Error|null, result: string) => void): void
122
+ /** _Non-standard._ */
123
+ toDataURL(mimeType: 'image/jpeg', cb: (err: Error|null, result: string) => void): void
124
+ /** _Non-standard._ */
125
+ toDataURL(mimeType: 'image/jpeg', config: JpegConfig, cb: (err: Error|null, result: string) => void): void
126
+ /** _Non-standard._ */
127
+ toDataURL(mimeType: 'image/jpeg', quality: number, cb: (err: Error|null, result: string) => void): void
128
+ }
129
+
130
+ export interface TextMetrics {
131
+ readonly alphabeticBaseline: number;
132
+ readonly actualBoundingBoxAscent: number;
133
+ readonly actualBoundingBoxDescent: number;
134
+ readonly actualBoundingBoxLeft: number;
135
+ readonly actualBoundingBoxRight: number;
136
+ readonly emHeightAscent: number;
137
+ readonly emHeightDescent: number;
138
+ readonly fontBoundingBoxAscent: number;
139
+ readonly fontBoundingBoxDescent: number;
140
+ readonly width: number;
141
+ }
142
+
143
+ export type CanvasFillRule = 'evenodd' | 'nonzero';
144
+
145
+ export type GlobalCompositeOperation =
146
+ | 'clear'
147
+ | 'copy'
148
+ | 'destination'
149
+ | 'source-over'
150
+ | 'destination-over'
151
+ | 'source-in'
152
+ | 'destination-in'
153
+ | 'source-out'
154
+ | 'destination-out'
155
+ | 'source-atop'
156
+ | 'destination-atop'
157
+ | 'xor'
158
+ | 'lighter'
159
+ | 'normal'
160
+ | 'multiply'
161
+ | 'screen'
162
+ | 'overlay'
163
+ | 'darken'
164
+ | 'lighten'
165
+ | 'color-dodge'
166
+ | 'color-burn'
167
+ | 'hard-light'
168
+ | 'soft-light'
169
+ | 'difference'
170
+ | 'exclusion'
171
+ | 'hue'
172
+ | 'saturation'
173
+ | 'color'
174
+ | 'luminosity'
175
+ | 'saturate';
176
+
177
+ export type CanvasLineCap = 'butt' | 'round' | 'square';
178
+
179
+ export type CanvasLineJoin = 'bevel' | 'miter' | 'round';
180
+
181
+ export type CanvasTextBaseline = 'alphabetic' | 'bottom' | 'hanging' | 'ideographic' | 'middle' | 'top';
182
+
183
+ export type CanvasTextAlign = 'center' | 'end' | 'left' | 'right' | 'start';
184
+
185
+ export class CanvasRenderingContext2D {
186
+ drawImage(image: Canvas|Image, dx: number, dy: number): void
187
+ drawImage(image: Canvas|Image, dx: number, dy: number, dw: number, dh: number): void
188
+ drawImage(image: Canvas|Image, sx: number, sy: number, sw: number, sh: number, dx: number, dy: number, dw: number, dh: number): void
189
+ putImageData(imagedata: ImageData, dx: number, dy: number): void;
190
+ putImageData(imagedata: ImageData, dx: number, dy: number, dirtyX: number, dirtyY: number, dirtyWidth: number, dirtyHeight: number): void;
191
+ getImageData(sx: number, sy: number, sw: number, sh: number): ImageData;
192
+ createImageData(sw: number, sh: number): ImageData;
193
+ createImageData(imagedata: ImageData): ImageData;
194
+ /**
195
+ * For PDF canvases, adds another page. If width and/or height are omitted,
196
+ * the canvas's initial size is used.
197
+ */
198
+ addPage(width?: number, height?: number): void
199
+ save(): void;
200
+ restore(): void;
201
+ rotate(angle: number): void;
202
+ translate(x: number, y: number): void;
203
+ transform(a: number, b: number, c: number, d: number, e: number, f: number): void;
204
+ getTransform(): DOMMatrix;
205
+ resetTransform(): void;
206
+ setTransform(transform?: DOMMatrix): void;
207
+ setTransform(a: number, b: number, c: number, d: number, e: number, f: number): void;
208
+ isPointInPath(x: number, y: number, fillRule?: CanvasFillRule): boolean;
209
+ scale(x: number, y: number): void;
210
+ clip(fillRule?: CanvasFillRule): void;
211
+ fill(fillRule?: CanvasFillRule): void;
212
+ stroke(): void;
213
+ fillText(text: string, x: number, y: number, maxWidth?: number): void;
214
+ strokeText(text: string, x: number, y: number, maxWidth?: number): void;
215
+ fillRect(x: number, y: number, w: number, h: number): void;
216
+ strokeRect(x: number, y: number, w: number, h: number): void;
217
+ clearRect(x: number, y: number, w: number, h: number): void;
218
+ rect(x: number, y: number, w: number, h: number): void;
219
+ roundRect(x: number, y: number, w: number, h: number, radii?: number | number[]): void;
220
+ measureText(text: string): TextMetrics;
221
+ moveTo(x: number, y: number): void;
222
+ lineTo(x: number, y: number): void;
223
+ bezierCurveTo(cp1x: number, cp1y: number, cp2x: number, cp2y: number, x: number, y: number): void;
224
+ quadraticCurveTo(cpx: number, cpy: number, x: number, y: number): void;
225
+ beginPath(): void;
226
+ closePath(): void;
227
+ arc(x: number, y: number, radius: number, startAngle: number, endAngle: number, counterclockwise?: boolean): void;
228
+ arcTo(x1: number, y1: number, x2: number, y2: number, radius: number): void;
229
+ ellipse(x: number, y: number, radiusX: number, radiusY: number, rotation: number, startAngle: number, endAngle: number, counterclockwise?: boolean): void;
230
+ setLineDash(segments: number[]): void;
231
+ getLineDash(): number[];
232
+ createPattern(image: Canvas|Image, repetition: 'repeat' | 'repeat-x' | 'repeat-y' | 'no-repeat' | '' | null): CanvasPattern
233
+ createLinearGradient(x0: number, y0: number, x1: number, y1: number): CanvasGradient;
234
+ createRadialGradient(x0: number, y0: number, r0: number, x1: number, y1: number, r1: number): CanvasGradient;
235
+ beginTag(tagName: string, attributes?: string): void;
236
+ endTag(tagName: string): void;
237
+ /**
238
+ * _Non-standard_. Defaults to 'good'. Affects pattern (gradient, image,
239
+ * etc.) rendering quality.
240
+ */
241
+ patternQuality: 'fast' | 'good' | 'best' | 'nearest' | 'bilinear'
242
+ imageSmoothingEnabled: boolean;
243
+ globalCompositeOperation: GlobalCompositeOperation;
244
+ globalAlpha: number;
245
+ shadowColor: string;
246
+ miterLimit: number;
247
+ lineWidth: number;
248
+ lineCap: CanvasLineCap;
249
+ lineJoin: CanvasLineJoin;
250
+ lineDashOffset: number;
251
+ shadowOffsetX: number;
252
+ shadowOffsetY: number;
253
+ shadowBlur: number;
254
+ /** _Non-standard_. Sets the antialiasing mode. */
255
+ antialias: 'default' | 'gray' | 'none' | 'subpixel'
256
+ /**
257
+ * Defaults to 'path'. The effect depends on the canvas type:
258
+ *
259
+ * * **Standard (image)** `'glyph'` and `'path'` both result in rasterized
260
+ * text. Glyph mode is faster than path, but may result in lower-quality
261
+ * text, especially when rotated or translated.
262
+ *
263
+ * * **PDF** `'glyph'` will embed text instead of paths into the PDF. This
264
+ * is faster to encode, faster to open with PDF viewers, yields a smaller
265
+ * file size and makes the text selectable. The subset of the font needed
266
+ * to render the glyphs will be embedded in the PDF. This is usually the
267
+ * mode you want to use with PDF canvases.
268
+ *
269
+ * * **SVG** glyph does not cause `<text>` elements to be produced as one
270
+ * might expect ([cairo bug](https://gitlab.freedesktop.org/cairo/cairo/issues/253)).
271
+ * Rather, glyph will create a `<defs>` section with a `<symbol>` for each
272
+ * glyph, then those glyphs be reused via `<use>` elements. `'path'` mode
273
+ * creates a `<path>` element for each text string. glyph mode is faster
274
+ * and yields a smaller file size.
275
+ *
276
+ * In glyph mode, `ctx.strokeText()` and `ctx.fillText()` behave the same
277
+ * (aside from using the stroke and fill style, respectively).
278
+ */
279
+ textDrawingMode: 'path' | 'glyph'
280
+ /**
281
+ * _Non-standard_. Defaults to 'good'. Like `patternQuality`, but applies to
282
+ * transformations affecting more than just patterns.
283
+ */
284
+ quality: 'fast' | 'good' | 'best' | 'nearest' | 'bilinear'
285
+ /** Returns or sets a `DOMMatrix` for the current transformation matrix. */
286
+ currentTransform: DOMMatrix
287
+ fillStyle: string | CanvasGradient | CanvasPattern;
288
+ strokeStyle: string | CanvasGradient | CanvasPattern;
289
+ font: string;
290
+ textBaseline: CanvasTextBaseline;
291
+ textAlign: CanvasTextAlign;
292
+ canvas: Canvas;
293
+ direction: 'ltr' | 'rtl';
294
+ lang: string;
295
+ }
296
+
297
+ export class CanvasGradient {
298
+ addColorStop(offset: number, color: string): void;
299
+ }
300
+
301
+ export class CanvasPattern {
302
+ setTransform(transform?: DOMMatrix): void;
303
+ }
304
+
305
+ // This does not extend HTMLImageElement because there are dozens of inherited
306
+ // methods and properties that we do not provide.
307
+ export class Image {
308
+ /** Track image data */
309
+ static readonly MODE_IMAGE: number
310
+ /** Track MIME data */
311
+ static readonly MODE_MIME: number
312
+
313
+ /**
314
+ * The URL, `data:` URI or local file path of the image to be loaded, or a
315
+ * Buffer instance containing an encoded image.
316
+ */
317
+ src: string | Buffer
318
+ /** Retrieves whether the object is fully loaded. */
319
+ readonly complete: boolean
320
+ /** Sets or retrieves the height of the image. */
321
+ height: number
322
+ /** Sets or retrieves the width of the image. */
323
+ width: number
324
+
325
+ /** The original height of the image resource before sizing. */
326
+ readonly naturalHeight: number
327
+ /** The original width of the image resource before sizing. */
328
+ readonly naturalWidth: number
329
+ /**
330
+ * Applies to JPEG images drawn to PDF canvases only. Setting
331
+ * `img.dataMode = Image.MODE_MIME` or `Image.MODE_MIME|Image.MODE_IMAGE`
332
+ * enables image MIME data tracking. When MIME data is tracked, PDF canvases
333
+ * can embed JPEGs directly into the output, rather than re-encoding into
334
+ * PNG. This can drastically reduce filesize and speed up rendering.
335
+ */
336
+ dataMode: number
337
+
338
+ onload: (() => void) | null;
339
+ onerror: ((err: Error) => void) | null;
340
+ }
341
+
342
+ /**
343
+ * Creates a Canvas instance. This function works in both Node.js and Web
344
+ * browsers, where there is no Canvas constructor.
345
+ * @param type Optionally specify to create a PDF or SVG canvas. Defaults to an
346
+ * image canvas.
347
+ */
348
+ export function createCanvas(width: number, height: number, type?: 'pdf'|'svg'): Canvas
349
+
350
+ /**
351
+ * Creates an ImageData instance. This function works in both Node.js and Web
352
+ * browsers.
353
+ * @param data An array containing the pixel representation of the image.
354
+ * @param height If omitted, the height is calculated based on the array's size
355
+ * and `width`.
356
+ */
357
+ export function createImageData(data: Uint8ClampedArray, width: number, height?: number): ImageData
358
+ /**
359
+ * _Non-standard._ Creates an ImageData instance for an alternative pixel
360
+ * format, such as RGB16_565
361
+ * @param data An array containing the pixel representation of the image.
362
+ * @param height If omitted, the height is calculated based on the array's size
363
+ * and `width`.
364
+ */
365
+ export function createImageData(data: Uint16Array, width: number, height?: number): ImageData
366
+ /**
367
+ * Creates an ImageData instance. This function works in both Node.js and Web
368
+ * browsers.
369
+ */
370
+ export function createImageData(width: number, height: number): ImageData
371
+
372
+ /**
373
+ * Convenience function for loading an image with a Promise interface. This
374
+ * function works in both Node.js and Web browsers; however, the `src` must be
375
+ * a string in Web browsers (it can only be a Buffer in Node.js).
376
+ * @param src URL, `data: ` URI or (Node.js only) a local file path or Buffer
377
+ * instance.
378
+ */
379
+ export function loadImage(src: string|Buffer, options?: any): Promise<Image>
380
+
381
+ /**
382
+ * Registers a font that is not installed as a system font. This must be used
383
+ * before creating Canvas instances.
384
+ * @param path Path to local font file.
385
+ * @param fontFace Description of the font face, corresponding to CSS properties
386
+ * used in `@font-face` rules.
387
+ */
388
+ export function registerFont(path: string, fontFace: {family: string, weight?: string, style?: string}): void
389
+
390
+ /**
391
+ * Unloads all fonts
392
+ */
393
+ export function deregisterAllFonts(): void;
394
+
395
+ /** This class must not be constructed directly; use `canvas.createPNGStream()`. */
396
+ export class PNGStream extends Readable {}
397
+ /** This class must not be constructed directly; use `canvas.createJPEGStream()`. */
398
+ export class JPEGStream extends Readable {}
399
+ /** This class must not be constructed directly; use `canvas.createPDFStream()`. */
400
+ export class PDFStream extends Readable {}
401
+
402
+ // TODO: this is wrong. See matrixTransform in lib/DOMMatrix.js
403
+ type DOMMatrixInit = DOMMatrix | string | number[];
404
+
405
+ interface DOMPointInit {
406
+ w?: number;
407
+ x?: number;
408
+ y?: number;
409
+ z?: number;
410
+ }
411
+
412
+ export class DOMPoint {
413
+ w: number;
414
+ x: number;
415
+ y: number;
416
+ z: number;
417
+ matrixTransform(matrix?: DOMMatrixInit): DOMPoint;
418
+ toJSON(): any;
419
+ static fromPoint(other?: DOMPointInit): DOMPoint;
420
+ }
421
+
422
+ export class DOMMatrix {
423
+ constructor(init?: string | number[]);
424
+ toString(): string;
425
+ multiply(other?: DOMMatrix): DOMMatrix;
426
+ multiplySelf(other?: DOMMatrix): DOMMatrix;
427
+ preMultiplySelf(other?: DOMMatrix): DOMMatrix;
428
+ translate(tx?: number, ty?: number, tz?: number): DOMMatrix;
429
+ translateSelf(tx?: number, ty?: number, tz?: number): DOMMatrix;
430
+ scale(scaleX?: number, scaleY?: number, scaleZ?: number, originX?: number, originY?: number, originZ?: number): DOMMatrix;
431
+ scale3d(scale?: number, originX?: number, originY?: number, originZ?: number): DOMMatrix;
432
+ scale3dSelf(scale?: number, originX?: number, originY?: number, originZ?: number): DOMMatrix;
433
+ scaleSelf(scaleX?: number, scaleY?: number, scaleZ?: number, originX?: number, originY?: number, originZ?: number): DOMMatrix;
434
+ /**
435
+ * @deprecated
436
+ */
437
+ scaleNonUniform(scaleX?: number, scaleY?: number): DOMMatrix;
438
+ rotateFromVector(x?: number, y?: number): DOMMatrix;
439
+ rotateFromVectorSelf(x?: number, y?: number): DOMMatrix;
440
+ rotate(rotX?: number, rotY?: number, rotZ?: number): DOMMatrix;
441
+ rotateSelf(rotX?: number, rotY?: number, rotZ?: number): DOMMatrix;
442
+ rotateAxisAngle(x?: number, y?: number, z?: number, angle?: number): DOMMatrix;
443
+ rotateAxisAngleSelf(x?: number, y?: number, z?: number, angle?: number): DOMMatrix;
444
+ skewX(sx?: number): DOMMatrix;
445
+ skewXSelf(sx?: number): DOMMatrix;
446
+ skewY(sy?: number): DOMMatrix;
447
+ skewYSelf(sy?: number): DOMMatrix;
448
+ flipX(): DOMMatrix;
449
+ flipY(): DOMMatrix;
450
+ inverse(): DOMMatrix;
451
+ invertSelf(): DOMMatrix;
452
+ setMatrixValue(transformList: string): DOMMatrix;
453
+ transformPoint(point?: DOMPoint): DOMPoint;
454
+ toJSON(): any;
455
+ toFloat32Array(): Float32Array;
456
+ toFloat64Array(): Float64Array;
457
+ readonly is2D: boolean;
458
+ readonly isIdentity: boolean;
459
+ a: number;
460
+ b: number;
461
+ c: number;
462
+ d: number;
463
+ e: number;
464
+ f: number;
465
+ m11: number;
466
+ m12: number;
467
+ m13: number;
468
+ m14: number;
469
+ m21: number;
470
+ m22: number;
471
+ m23: number;
472
+ m24: number;
473
+ m31: number;
474
+ m32: number;
475
+ m33: number;
476
+ m34: number;
477
+ m41: number;
478
+ m42: number;
479
+ m43: number;
480
+ m44: number;
481
+ static fromMatrix(other: DOMMatrix): DOMMatrix;
482
+ static fromFloat32Array(a: Float32Array): DOMMatrix;
483
+ static fromFloat64Array(a: Float64Array): DOMMatrix;
484
+ }
485
+
486
+ export class ImageData {
487
+ constructor(sw: number, sh: number);
488
+ constructor(data: Uint8ClampedArray, sw: number, sh?: number);
489
+ readonly data: Uint8ClampedArray;
490
+ readonly height: number;
491
+ readonly width: number;
492
+ }
493
+
494
+ // Not documented: backends
495
+
496
+ /** Library version. */
497
+ export const version: string
498
+ /** Cairo version. */
499
+ export const cairoVersion: string
500
+ /** jpeglib version, if built with JPEG support. */
501
+ export const jpegVersion: string | undefined
502
+ /** giflib version, if built with GIF support. */
503
+ export const gifVersion: string | undefined
504
+ /** freetype version. */
505
+ export const freetypeVersion: string
506
+ /** rsvg version. */
507
+ export const rsvgVersion: string | undefined
package/index.js ADDED
@@ -0,0 +1,94 @@
1
+ const Canvas = require('./lib/canvas')
2
+ const Image = require('./lib/image')
3
+ const CanvasRenderingContext2D = require('./lib/context2d')
4
+ const CanvasPattern = require('./lib/pattern')
5
+ const packageJson = require('./package.json')
6
+ const bindings = require('./lib/bindings')
7
+ const fs = require('fs')
8
+ const PNGStream = require('./lib/pngstream')
9
+ const PDFStream = require('./lib/pdfstream')
10
+ const JPEGStream = require('./lib/jpegstream')
11
+ const { DOMPoint, DOMMatrix } = require('./lib/DOMMatrix')
12
+
13
+ bindings.setDOMMatrix(DOMMatrix)
14
+
15
+ function createCanvas (width, height, type) {
16
+ return new Canvas(width, height, type)
17
+ }
18
+
19
+ function createImageData (array, width, height) {
20
+ return new bindings.ImageData(array, width, height)
21
+ }
22
+
23
+ function loadImage (src) {
24
+ return new Promise((resolve, reject) => {
25
+ const image = new Image()
26
+
27
+ function cleanup () {
28
+ image.onload = null
29
+ image.onerror = null
30
+ }
31
+
32
+ image.onload = () => { cleanup(); resolve(image) }
33
+ image.onerror = (err) => { cleanup(); reject(err) }
34
+
35
+ image.src = src
36
+ })
37
+ }
38
+
39
+ /**
40
+ * Resolve paths for registerFont. Must be called *before* creating a Canvas
41
+ * instance.
42
+ * @param src {string} Path to font file.
43
+ * @param fontFace {{family: string, weight?: string, style?: string}} Object
44
+ * specifying font information. `weight` and `style` default to `"normal"`.
45
+ */
46
+ function registerFont (src, fontFace) {
47
+ // TODO this doesn't need to be on Canvas; it should just be a static method
48
+ // of `bindings`.
49
+ return Canvas._registerFont(fs.realpathSync(src), fontFace)
50
+ }
51
+
52
+ /**
53
+ * Unload all fonts from pango to free up memory
54
+ */
55
+ function deregisterAllFonts () {
56
+ return Canvas._deregisterAllFonts()
57
+ }
58
+
59
+ exports.Canvas = Canvas
60
+ exports.Context2d = CanvasRenderingContext2D // Legacy/compat export
61
+ exports.CanvasRenderingContext2D = CanvasRenderingContext2D
62
+ exports.CanvasGradient = bindings.CanvasGradient
63
+ exports.CanvasPattern = CanvasPattern
64
+ exports.Image = Image
65
+ exports.ImageData = bindings.ImageData
66
+ exports.PNGStream = PNGStream
67
+ exports.PDFStream = PDFStream
68
+ exports.JPEGStream = JPEGStream
69
+ exports.DOMMatrix = DOMMatrix
70
+ exports.DOMPoint = DOMPoint
71
+
72
+ exports.registerFont = registerFont
73
+ exports.deregisterAllFonts = deregisterAllFonts
74
+
75
+ exports.createCanvas = createCanvas
76
+ exports.createImageData = createImageData
77
+ exports.loadImage = loadImage
78
+
79
+ exports.backends = bindings.Backends
80
+
81
+ /** Library version. */
82
+ exports.version = packageJson.version
83
+ /** Cairo version. */
84
+ exports.cairoVersion = bindings.cairoVersion
85
+ /** jpeglib version. */
86
+ exports.jpegVersion = bindings.jpegVersion
87
+ /** gif_lib version. */
88
+ exports.gifVersion = bindings.gifVersion ? bindings.gifVersion.replace(/[^.\d]/g, '') : undefined
89
+ /** freetype version. */
90
+ exports.freetypeVersion = bindings.freetypeVersion
91
+ /** rsvg version. */
92
+ exports.rsvgVersion = bindings.rsvgVersion
93
+ /** pango version. */
94
+ exports.pangoVersion = bindings.pangoVersion