1 |
|
2 |
|
3 | import { Readable } from 'stream'
|
4 |
|
5 | export interface PngConfig {
|
6 |
|
7 | compressionLevel?: 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
|
8 | |
9 |
|
10 |
|
11 |
|
12 |
|
13 |
|
14 |
|
15 |
|
16 | filters?: number
|
17 | |
18 |
|
19 |
|
20 |
|
21 | palette?: Uint8ClampedArray
|
22 | |
23 |
|
24 |
|
25 |
|
26 | backgroundIndex?: number
|
27 |
|
28 | resolution?: number
|
29 | }
|
30 |
|
31 | export interface JpegConfig {
|
32 |
|
33 | quality?: number
|
34 |
|
35 | progressive?: boolean
|
36 |
|
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 |
|
60 | readonly type: 'image'|'pdf'|'svg'
|
61 |
|
62 |
|
63 | readonly stride: number;
|
64 |
|
65 |
|
66 | static readonly PNG_NO_FILTERS: number
|
67 |
|
68 | static readonly PNG_ALL_FILTERS: number
|
69 |
|
70 | static readonly PNG_FILTER_NONE: number
|
71 |
|
72 | static readonly PNG_FILTER_SUB: number
|
73 |
|
74 | static readonly PNG_FILTER_UP: number
|
75 |
|
76 | static readonly PNG_FILTER_AVG: number
|
77 |
|
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 |
|
196 |
|
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 |
|
239 |
|
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 |
|
255 | antialias: 'default' | 'gray' | 'none' | 'subpixel'
|
256 | |
257 |
|
258 |
|
259 |
|
260 |
|
261 |
|
262 |
|
263 |
|
264 |
|
265 |
|
266 |
|
267 |
|
268 |
|
269 |
|
270 |
|
271 |
|
272 |
|
273 |
|
274 |
|
275 |
|
276 |
|
277 |
|
278 |
|
279 | textDrawingMode: 'path' | 'glyph'
|
280 | |
281 |
|
282 |
|
283 |
|
284 | quality: 'fast' | 'good' | 'best' | 'nearest' | 'bilinear'
|
285 |
|
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 | }
|
295 |
|
296 | export class CanvasGradient {
|
297 | addColorStop(offset: number, color: string): void;
|
298 | }
|
299 |
|
300 | export class CanvasPattern {
|
301 | setTransform(transform?: DOMMatrix): void;
|
302 | }
|
303 |
|
304 |
|
305 |
|
306 | export class Image {
|
307 |
|
308 | static readonly MODE_IMAGE: number
|
309 |
|
310 | static readonly MODE_MIME: number
|
311 |
|
312 | |
313 |
|
314 |
|
315 |
|
316 | src: string | Buffer
|
317 |
|
318 | readonly complete: boolean
|
319 |
|
320 | height: number
|
321 |
|
322 | width: number
|
323 |
|
324 |
|
325 | readonly naturalHeight: number
|
326 |
|
327 | readonly naturalWidth: number
|
328 | |
329 |
|
330 |
|
331 |
|
332 |
|
333 |
|
334 |
|
335 | dataMode: number
|
336 |
|
337 | onload: (() => void) | null;
|
338 | onerror: ((err: Error) => void) | null;
|
339 | }
|
340 |
|
341 | /**
|
342 | * Creates a Canvas instance. This function works in both Node.js and Web
|
343 | * browsers, where there is no Canvas constructor.
|
344 | * @param type Optionally specify to create a PDF or SVG canvas. Defaults to an
|
345 | * image canvas.
|
346 | */
|
347 | export function createCanvas(width: number, height: number, type?: 'pdf'|'svg'): Canvas
|
348 |
|
349 | /**
|
350 | * Creates an ImageData instance. This function works in both Node.js and Web
|
351 | * browsers.
|
352 | * @param data An array containing the pixel representation of the image.
|
353 | * @param height If omitted, the height is calculated based on the array's size
|
354 | * and `width`.
|
355 | */
|
356 | export function createImageData(data: Uint8ClampedArray, width: number, height?: number): ImageData
|
357 | /**
|
358 | * _Non-standard._ Creates an ImageData instance for an alternative pixel
|
359 | * format, such as RGB16_565
|
360 | * @param data An array containing the pixel representation of the image.
|
361 | * @param height If omitted, the height is calculated based on the array's size
|
362 | * and `width`.
|
363 | */
|
364 | export function createImageData(data: Uint16Array, width: number, height?: number): ImageData
|
365 | /**
|
366 | * Creates an ImageData instance. This function works in both Node.js and Web
|
367 | * browsers.
|
368 | */
|
369 | export function createImageData(width: number, height: number): ImageData
|
370 |
|
371 | /**
|
372 | * Convenience function for loading an image with a Promise interface. This
|
373 | * function works in both Node.js and Web browsers; however, the `src` must be
|
374 | * a string in Web browsers (it can only be a Buffer in Node.js).
|
375 | * @param src URL, `data: ` URI or (Node.js only) a local file path or Buffer
|
376 | * instance.
|
377 | */
|
378 | export function loadImage(src: string|Buffer, options?: any): Promise<Image>
|
379 |
|
380 | /**
|
381 | * Registers a font that is not installed as a system font. This must be used
|
382 | * before creating Canvas instances.
|
383 | * @param path Path to local font file.
|
384 | * @param fontFace Description of the font face, corresponding to CSS properties
|
385 | * used in `@font-face` rules.
|
386 | */
|
387 | export function registerFont(path: string, fontFace: {family: string, weight?: string, style?: string}): void
|
388 |
|
389 | /**
|
390 | * Unloads all fonts
|
391 | */
|
392 | export function deregisterAllFonts(): void;
|
393 |
|
394 | /** This class must not be constructed directly; use `canvas.createPNGStream()`. */
|
395 | export class PNGStream extends Readable {}
|
396 | /** This class must not be constructed directly; use `canvas.createJPEGStream()`. */
|
397 | export class JPEGStream extends Readable {}
|
398 | /** This class must not be constructed directly; use `canvas.createPDFStream()`. */
|
399 | export class PDFStream extends Readable {}
|
400 |
|
401 | // TODO: this is wrong. See matrixTransform in lib/DOMMatrix.js
|
402 | type DOMMatrixInit = DOMMatrix | string | number[];
|
403 |
|
404 | interface DOMPointInit {
|
405 | w?: number;
|
406 | x?: number;
|
407 | y?: number;
|
408 | z?: number;
|
409 | }
|
410 |
|
411 | export class DOMPoint {
|
412 | w: number;
|
413 | x: number;
|
414 | y: number;
|
415 | z: number;
|
416 | matrixTransform(matrix?: DOMMatrixInit): DOMPoint;
|
417 | toJSON(): any;
|
418 | static fromPoint(other?: DOMPointInit): DOMPoint;
|
419 | }
|
420 |
|
421 | export class DOMMatrix {
|
422 | constructor(init?: string | number[]);
|
423 | toString(): string;
|
424 | multiply(other?: DOMMatrix): DOMMatrix;
|
425 | multiplySelf(other?: DOMMatrix): DOMMatrix;
|
426 | preMultiplySelf(other?: DOMMatrix): DOMMatrix;
|
427 | translate(tx?: number, ty?: number, tz?: number): DOMMatrix;
|
428 | translateSelf(tx?: number, ty?: number, tz?: number): DOMMatrix;
|
429 | scale(scaleX?: number, scaleY?: number, scaleZ?: number, originX?: number, originY?: number, originZ?: number): DOMMatrix;
|
430 | scale3d(scale?: number, originX?: number, originY?: number, originZ?: number): DOMMatrix;
|
431 | scale3dSelf(scale?: number, originX?: number, originY?: number, originZ?: number): DOMMatrix;
|
432 | scaleSelf(scaleX?: number, scaleY?: number, scaleZ?: number, originX?: number, originY?: number, originZ?: number): DOMMatrix;
|
433 | /**
|
434 | * @deprecated
|
435 | */
|
436 | scaleNonUniform(scaleX?: number, scaleY?: number): DOMMatrix;
|
437 | rotateFromVector(x?: number, y?: number): DOMMatrix;
|
438 | rotateFromVectorSelf(x?: number, y?: number): DOMMatrix;
|
439 | rotate(rotX?: number, rotY?: number, rotZ?: number): DOMMatrix;
|
440 | rotateSelf(rotX?: number, rotY?: number, rotZ?: number): DOMMatrix;
|
441 | rotateAxisAngle(x?: number, y?: number, z?: number, angle?: number): DOMMatrix;
|
442 | rotateAxisAngleSelf(x?: number, y?: number, z?: number, angle?: number): DOMMatrix;
|
443 | skewX(sx?: number): DOMMatrix;
|
444 | skewXSelf(sx?: number): DOMMatrix;
|
445 | skewY(sy?: number): DOMMatrix;
|
446 | skewYSelf(sy?: number): DOMMatrix;
|
447 | flipX(): DOMMatrix;
|
448 | flipY(): DOMMatrix;
|
449 | inverse(): DOMMatrix;
|
450 | invertSelf(): DOMMatrix;
|
451 | setMatrixValue(transformList: string): DOMMatrix;
|
452 | transformPoint(point?: DOMPoint): DOMPoint;
|
453 | toJSON(): any;
|
454 | toFloat32Array(): Float32Array;
|
455 | toFloat64Array(): Float64Array;
|
456 | readonly is2D: boolean;
|
457 | readonly isIdentity: boolean;
|
458 | a: number;
|
459 | b: number;
|
460 | c: number;
|
461 | d: number;
|
462 | e: number;
|
463 | f: number;
|
464 | m11: number;
|
465 | m12: number;
|
466 | m13: number;
|
467 | m14: number;
|
468 | m21: number;
|
469 | m22: number;
|
470 | m23: number;
|
471 | m24: number;
|
472 | m31: number;
|
473 | m32: number;
|
474 | m33: number;
|
475 | m34: number;
|
476 | m41: number;
|
477 | m42: number;
|
478 | m43: number;
|
479 | m44: number;
|
480 | static fromMatrix(other: DOMMatrix): DOMMatrix;
|
481 | static fromFloat32Array(a: Float32Array): DOMMatrix;
|
482 | static fromFloat64Array(a: Float64Array): DOMMatrix;
|
483 | }
|
484 |
|
485 | export class ImageData {
|
486 | constructor(sw: number, sh: number);
|
487 | constructor(data: Uint8ClampedArray, sw: number, sh?: number);
|
488 | readonly data: Uint8ClampedArray;
|
489 | readonly height: number;
|
490 | readonly width: number;
|
491 | }
|
492 |
|
493 | // Not documented: backends
|
494 |
|
495 | /** Library version. */
|
496 | export const version: string
|
497 | /** Cairo version. */
|
498 | export const cairoVersion: string
|
499 | /** jpeglib version, if built with JPEG support. */
|
500 | export const jpegVersion: string | undefined
|
501 | /** giflib version, if built with GIF support. */
|
502 | export const gifVersion: string | undefined
|
503 | /** freetype version. */
|
504 | export const freetypeVersion: string
|
505 | /** rsvg version. */
|
506 | export const rsvgVersion: string | undefined
|
507 |
|
\ | No newline at end of file |