UNPKG

18.5 kBTypeScriptView Raw
1// TypeScript Version: 3.0
2
3import { Readable } from 'stream'
4
5export 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
31export 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
40export 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
50export interface NodeCanvasRenderingContext2DSettings {
51 alpha?: boolean
52 pixelFormat?: 'RGBA32' | 'RGB24' | 'A8' | 'RGB16_565' | 'A1' | 'RGB30'
53}
54
55export 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
130export 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
143export type CanvasFillRule = 'evenodd' | 'nonzero';
144
145export 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
177export type CanvasLineCap = 'butt' | 'round' | 'square';
178
179export type CanvasLineJoin = 'bevel' | 'miter' | 'round';
180
181export type CanvasTextBaseline = 'alphabetic' | 'bottom' | 'hanging' | 'ideographic' | 'middle' | 'top';
182
183export type CanvasTextAlign = 'center' | 'end' | 'left' | 'right' | 'start';
184
185export 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}
295
296export class CanvasGradient {
297 addColorStop(offset: number, color: string): void;
298}
299
300export class CanvasPattern {
301 setTransform(transform?: DOMMatrix): void;
302}
303
304// This does not extend HTMLImageElement because there are dozens of inherited
305// methods and properties that we do not provide.
306export class Image {
307 /** Track image data */
308 static readonly MODE_IMAGE: number
309 /** Track MIME data */
310 static readonly MODE_MIME: number
311
312 /**
313 * The URL, `data:` URI or local file path of the image to be loaded, or a
314 * Buffer instance containing an encoded image.
315 */
316 src: string | Buffer
317 /** Retrieves whether the object is fully loaded. */
318 readonly complete: boolean
319 /** Sets or retrieves the height of the image. */
320 height: number
321 /** Sets or retrieves the width of the image. */
322 width: number
323
324 /** The original height of the image resource before sizing. */
325 readonly naturalHeight: number
326 /** The original width of the image resource before sizing. */
327 readonly naturalWidth: number
328 /**
329 * Applies to JPEG images drawn to PDF canvases only. Setting
330 * `img.dataMode = Image.MODE_MIME` or `Image.MODE_MIME|Image.MODE_IMAGE`
331 * enables image MIME data tracking. When MIME data is tracked, PDF canvases
332 * can embed JPEGs directly into the output, rather than re-encoding into
333 * PNG. This can drastically reduce filesize and speed up rendering.
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 */
347export 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 */
356export 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 */
364export 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 */
369export 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 */
378export 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 */
387export function registerFont(path: string, fontFace: {family: string, weight?: string, style?: string}): void
388
389/**
390 * Unloads all fonts
391 */
392export function deregisterAllFonts(): void;
393
394/** This class must not be constructed directly; use `canvas.createPNGStream()`. */
395export class PNGStream extends Readable {}
396/** This class must not be constructed directly; use `canvas.createJPEGStream()`. */
397export class JPEGStream extends Readable {}
398/** This class must not be constructed directly; use `canvas.createPDFStream()`. */
399export class PDFStream extends Readable {}
400
401// TODO: this is wrong. See matrixTransform in lib/DOMMatrix.js
402type DOMMatrixInit = DOMMatrix | string | number[];
403
404interface DOMPointInit {
405 w?: number;
406 x?: number;
407 y?: number;
408 z?: number;
409}
410
411export 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
421export 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
485export 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. */
496export const version: string
497/** Cairo version. */
498export const cairoVersion: string
499/** jpeglib version, if built with JPEG support. */
500export const jpegVersion: string | undefined
501/** giflib version, if built with GIF support. */
502export const gifVersion: string | undefined
503/** freetype version. */
504export const freetypeVersion: string
505/** rsvg version. */
506export const rsvgVersion: string | undefined
507
\No newline at end of file