@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.
- package/Readme.md +654 -0
- package/binding.gyp +229 -0
- package/browser.js +31 -0
- package/index.d.ts +507 -0
- package/index.js +94 -0
- package/lib/DOMMatrix.js +678 -0
- package/lib/bindings.js +113 -0
- package/lib/canvas.js +113 -0
- package/lib/context2d.js +11 -0
- package/lib/image.js +97 -0
- package/lib/jpegstream.js +41 -0
- package/lib/pattern.js +15 -0
- package/lib/pdfstream.js +35 -0
- package/lib/pngstream.js +42 -0
- package/package.json +77 -0
- package/scripts/install.js +19 -0
- package/src/Backends.h +9 -0
- package/src/Canvas.cc +1026 -0
- package/src/Canvas.h +128 -0
- package/src/CanvasError.h +37 -0
- package/src/CanvasGradient.cc +113 -0
- package/src/CanvasGradient.h +20 -0
- package/src/CanvasPattern.cc +129 -0
- package/src/CanvasPattern.h +33 -0
- package/src/CanvasRenderingContext2d.cc +3527 -0
- package/src/CanvasRenderingContext2d.h +238 -0
- package/src/CharData.h +233 -0
- package/src/FontParser.cc +605 -0
- package/src/FontParser.h +115 -0
- package/src/Image.cc +1719 -0
- package/src/Image.h +146 -0
- package/src/ImageData.cc +138 -0
- package/src/ImageData.h +26 -0
- package/src/InstanceData.h +12 -0
- package/src/JPEGStream.h +157 -0
- package/src/PNG.h +292 -0
- package/src/Point.h +11 -0
- package/src/Util.h +9 -0
- package/src/bmp/BMPParser.cc +459 -0
- package/src/bmp/BMPParser.h +60 -0
- package/src/bmp/LICENSE.md +24 -0
- package/src/closure.cc +52 -0
- package/src/closure.h +98 -0
- package/src/color.cc +796 -0
- package/src/color.h +30 -0
- package/src/dll_visibility.h +20 -0
- package/src/init.cc +114 -0
- package/src/register_font.cc +352 -0
- package/src/register_font.h +7 -0
- package/util/has_lib.js +119 -0
- 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
|