apexify.js 5.1.1 → 5.2.0
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/CHANGELOG.md +240 -0
- package/README.md +248 -1105
- package/dist/cjs/Canvas/ApexPainter.d.ts +182 -204
- package/dist/cjs/Canvas/ApexPainter.d.ts.map +1 -1
- package/dist/cjs/Canvas/ApexPainter.js +482 -1286
- package/dist/cjs/Canvas/ApexPainter.js.map +1 -1
- package/dist/cjs/Canvas/extended/CanvasCreator.d.ts +33 -0
- package/dist/cjs/Canvas/extended/CanvasCreator.d.ts.map +1 -0
- package/dist/cjs/Canvas/extended/CanvasCreator.js +223 -0
- package/dist/cjs/Canvas/extended/CanvasCreator.js.map +1 -0
- package/dist/cjs/Canvas/extended/ChartCreator.d.ts +26 -0
- package/dist/cjs/Canvas/extended/ChartCreator.d.ts.map +1 -0
- package/dist/cjs/Canvas/extended/ChartCreator.js +50 -0
- package/dist/cjs/Canvas/extended/ChartCreator.js.map +1 -0
- package/dist/cjs/Canvas/extended/GIFCreator.d.ts +43 -0
- package/dist/cjs/Canvas/extended/GIFCreator.d.ts.map +1 -0
- package/dist/cjs/Canvas/extended/GIFCreator.js +157 -0
- package/dist/cjs/Canvas/extended/GIFCreator.js.map +1 -0
- package/dist/cjs/Canvas/extended/ImageCreator.d.ts +83 -0
- package/dist/cjs/Canvas/extended/ImageCreator.d.ts.map +1 -0
- package/dist/cjs/Canvas/extended/ImageCreator.js +479 -0
- package/dist/cjs/Canvas/extended/ImageCreator.js.map +1 -0
- package/dist/cjs/Canvas/extended/TextCreator.d.ts +35 -0
- package/dist/cjs/Canvas/extended/TextCreator.d.ts.map +1 -0
- package/dist/cjs/Canvas/extended/TextCreator.js +98 -0
- package/dist/cjs/Canvas/extended/TextCreator.js.map +1 -0
- package/dist/cjs/Canvas/extended/VideoCreator.d.ts +370 -0
- package/dist/cjs/Canvas/extended/VideoCreator.d.ts.map +1 -0
- package/dist/cjs/Canvas/extended/VideoCreator.js +478 -0
- package/dist/cjs/Canvas/extended/VideoCreator.js.map +1 -0
- package/dist/cjs/Canvas/utils/Background/bg.d.ts +1 -1
- package/dist/cjs/Canvas/utils/Background/bg.d.ts.map +1 -1
- package/dist/cjs/Canvas/utils/Background/bg.js +43 -7
- package/dist/cjs/Canvas/utils/Background/bg.js.map +1 -1
- package/dist/cjs/Canvas/utils/Charts/barchart.d.ts +230 -0
- package/dist/cjs/Canvas/utils/Charts/barchart.d.ts.map +1 -0
- package/dist/cjs/Canvas/utils/Charts/barchart.js +1891 -0
- package/dist/cjs/Canvas/utils/Charts/barchart.js.map +1 -0
- package/dist/cjs/Canvas/utils/Charts/comparisonchart.d.ts +103 -0
- package/dist/cjs/Canvas/utils/Charts/comparisonchart.d.ts.map +1 -0
- package/dist/cjs/Canvas/utils/Charts/comparisonchart.js +368 -0
- package/dist/cjs/Canvas/utils/Charts/comparisonchart.js.map +1 -0
- package/dist/cjs/Canvas/utils/Charts/horizontalbarchart.d.ts +178 -0
- package/dist/cjs/Canvas/utils/Charts/horizontalbarchart.d.ts.map +1 -0
- package/dist/cjs/Canvas/utils/Charts/horizontalbarchart.js +1389 -0
- package/dist/cjs/Canvas/utils/Charts/horizontalbarchart.js.map +1 -0
- package/dist/cjs/Canvas/utils/Charts/index.d.ts +45 -0
- package/dist/cjs/Canvas/utils/Charts/index.d.ts.map +1 -0
- package/dist/cjs/Canvas/utils/Charts/index.js +17 -0
- package/dist/cjs/Canvas/utils/Charts/index.js.map +1 -0
- package/dist/cjs/Canvas/utils/Charts/linechart.d.ts +216 -0
- package/dist/cjs/Canvas/utils/Charts/linechart.d.ts.map +1 -0
- package/dist/cjs/Canvas/utils/Charts/linechart.js +1761 -0
- package/dist/cjs/Canvas/utils/Charts/linechart.js.map +1 -0
- package/dist/cjs/Canvas/utils/Charts/piechart.d.ts +167 -0
- package/dist/cjs/Canvas/utils/Charts/piechart.d.ts.map +1 -0
- package/dist/cjs/Canvas/utils/Charts/piechart.js +794 -0
- package/dist/cjs/Canvas/utils/Charts/piechart.js.map +1 -0
- package/dist/cjs/Canvas/utils/General/batchOperations.d.ts.map +1 -1
- package/dist/cjs/Canvas/utils/General/batchOperations.js +3 -4
- package/dist/cjs/Canvas/utils/General/batchOperations.js.map +1 -1
- package/dist/cjs/Canvas/utils/General/general functions.d.ts.map +1 -1
- package/dist/cjs/Canvas/utils/General/general functions.js +62 -33
- package/dist/cjs/Canvas/utils/General/general functions.js.map +1 -1
- package/dist/cjs/Canvas/utils/General/imageStitching.d.ts.map +1 -1
- package/dist/cjs/Canvas/utils/General/imageStitching.js +3 -6
- package/dist/cjs/Canvas/utils/General/imageStitching.js.map +1 -1
- package/dist/cjs/Canvas/utils/Image/imageMasking.d.ts.map +1 -1
- package/dist/cjs/Canvas/utils/Image/imageMasking.js +5 -12
- package/dist/cjs/Canvas/utils/Image/imageMasking.js.map +1 -1
- package/dist/cjs/Canvas/utils/Image/imageProperties.d.ts +4 -4
- package/dist/cjs/Canvas/utils/Image/imageProperties.d.ts.map +1 -1
- package/dist/cjs/Canvas/utils/Image/imageProperties.js +44 -9
- package/dist/cjs/Canvas/utils/Image/imageProperties.js.map +1 -1
- package/dist/cjs/Canvas/utils/Texts/enhancedTextRenderer.d.ts +5 -0
- package/dist/cjs/Canvas/utils/Texts/enhancedTextRenderer.d.ts.map +1 -1
- package/dist/cjs/Canvas/utils/Texts/enhancedTextRenderer.js +48 -5
- package/dist/cjs/Canvas/utils/Texts/enhancedTextRenderer.js.map +1 -1
- package/dist/cjs/Canvas/utils/Texts/textProperties.d.ts +1 -1
- package/dist/cjs/Canvas/utils/Texts/textProperties.d.ts.map +1 -1
- package/dist/cjs/Canvas/utils/Texts/textProperties.js +48 -5
- package/dist/cjs/Canvas/utils/Texts/textProperties.js.map +1 -1
- package/dist/cjs/Canvas/utils/Video/videoHelpers.d.ts +489 -0
- package/dist/cjs/Canvas/utils/Video/videoHelpers.d.ts.map +1 -0
- package/dist/cjs/Canvas/utils/Video/videoHelpers.js +1835 -0
- package/dist/cjs/Canvas/utils/Video/videoHelpers.js.map +1 -0
- package/dist/cjs/Canvas/utils/errorUtils.d.ts +15 -0
- package/dist/cjs/Canvas/utils/errorUtils.d.ts.map +1 -0
- package/dist/cjs/Canvas/utils/errorUtils.js +26 -0
- package/dist/cjs/Canvas/utils/errorUtils.js.map +1 -0
- package/dist/cjs/Canvas/utils/types.d.ts +17 -178
- package/dist/cjs/Canvas/utils/types.d.ts.map +1 -1
- package/dist/cjs/Canvas/utils/types.js.map +1 -1
- package/dist/cjs/Canvas/utils/utils.d.ts +4 -3
- package/dist/cjs/Canvas/utils/utils.d.ts.map +1 -1
- package/dist/cjs/Canvas/utils/utils.js +40 -6
- package/dist/cjs/Canvas/utils/utils.js.map +1 -1
- package/dist/cjs/index.d.ts +1 -8
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +14 -45
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
- package/dist/esm/Canvas/ApexPainter.d.ts +182 -204
- package/dist/esm/Canvas/ApexPainter.d.ts.map +1 -1
- package/dist/esm/Canvas/ApexPainter.js +482 -1286
- package/dist/esm/Canvas/ApexPainter.js.map +1 -1
- package/dist/esm/Canvas/extended/CanvasCreator.d.ts +33 -0
- package/dist/esm/Canvas/extended/CanvasCreator.d.ts.map +1 -0
- package/dist/esm/Canvas/extended/CanvasCreator.js +223 -0
- package/dist/esm/Canvas/extended/CanvasCreator.js.map +1 -0
- package/dist/esm/Canvas/extended/ChartCreator.d.ts +26 -0
- package/dist/esm/Canvas/extended/ChartCreator.d.ts.map +1 -0
- package/dist/esm/Canvas/extended/ChartCreator.js +50 -0
- package/dist/esm/Canvas/extended/ChartCreator.js.map +1 -0
- package/dist/esm/Canvas/extended/GIFCreator.d.ts +43 -0
- package/dist/esm/Canvas/extended/GIFCreator.d.ts.map +1 -0
- package/dist/esm/Canvas/extended/GIFCreator.js +157 -0
- package/dist/esm/Canvas/extended/GIFCreator.js.map +1 -0
- package/dist/esm/Canvas/extended/ImageCreator.d.ts +83 -0
- package/dist/esm/Canvas/extended/ImageCreator.d.ts.map +1 -0
- package/dist/esm/Canvas/extended/ImageCreator.js +479 -0
- package/dist/esm/Canvas/extended/ImageCreator.js.map +1 -0
- package/dist/esm/Canvas/extended/TextCreator.d.ts +35 -0
- package/dist/esm/Canvas/extended/TextCreator.d.ts.map +1 -0
- package/dist/esm/Canvas/extended/TextCreator.js +98 -0
- package/dist/esm/Canvas/extended/TextCreator.js.map +1 -0
- package/dist/esm/Canvas/extended/VideoCreator.d.ts +370 -0
- package/dist/esm/Canvas/extended/VideoCreator.d.ts.map +1 -0
- package/dist/esm/Canvas/extended/VideoCreator.js +478 -0
- package/dist/esm/Canvas/extended/VideoCreator.js.map +1 -0
- package/dist/esm/Canvas/utils/Background/bg.d.ts +1 -1
- package/dist/esm/Canvas/utils/Background/bg.d.ts.map +1 -1
- package/dist/esm/Canvas/utils/Background/bg.js +43 -7
- package/dist/esm/Canvas/utils/Background/bg.js.map +1 -1
- package/dist/esm/Canvas/utils/Charts/barchart.d.ts +230 -0
- package/dist/esm/Canvas/utils/Charts/barchart.d.ts.map +1 -0
- package/dist/esm/Canvas/utils/Charts/barchart.js +1891 -0
- package/dist/esm/Canvas/utils/Charts/barchart.js.map +1 -0
- package/dist/esm/Canvas/utils/Charts/comparisonchart.d.ts +103 -0
- package/dist/esm/Canvas/utils/Charts/comparisonchart.d.ts.map +1 -0
- package/dist/esm/Canvas/utils/Charts/comparisonchart.js +368 -0
- package/dist/esm/Canvas/utils/Charts/comparisonchart.js.map +1 -0
- package/dist/esm/Canvas/utils/Charts/horizontalbarchart.d.ts +178 -0
- package/dist/esm/Canvas/utils/Charts/horizontalbarchart.d.ts.map +1 -0
- package/dist/esm/Canvas/utils/Charts/horizontalbarchart.js +1389 -0
- package/dist/esm/Canvas/utils/Charts/horizontalbarchart.js.map +1 -0
- package/dist/esm/Canvas/utils/Charts/index.d.ts +45 -0
- package/dist/esm/Canvas/utils/Charts/index.d.ts.map +1 -0
- package/dist/esm/Canvas/utils/Charts/index.js +17 -0
- package/dist/esm/Canvas/utils/Charts/index.js.map +1 -0
- package/dist/esm/Canvas/utils/Charts/linechart.d.ts +216 -0
- package/dist/esm/Canvas/utils/Charts/linechart.d.ts.map +1 -0
- package/dist/esm/Canvas/utils/Charts/linechart.js +1761 -0
- package/dist/esm/Canvas/utils/Charts/linechart.js.map +1 -0
- package/dist/esm/Canvas/utils/Charts/piechart.d.ts +167 -0
- package/dist/esm/Canvas/utils/Charts/piechart.d.ts.map +1 -0
- package/dist/esm/Canvas/utils/Charts/piechart.js +794 -0
- package/dist/esm/Canvas/utils/Charts/piechart.js.map +1 -0
- package/dist/esm/Canvas/utils/General/batchOperations.d.ts.map +1 -1
- package/dist/esm/Canvas/utils/General/batchOperations.js +3 -4
- package/dist/esm/Canvas/utils/General/batchOperations.js.map +1 -1
- package/dist/esm/Canvas/utils/General/general functions.d.ts.map +1 -1
- package/dist/esm/Canvas/utils/General/general functions.js +62 -33
- package/dist/esm/Canvas/utils/General/general functions.js.map +1 -1
- package/dist/esm/Canvas/utils/General/imageStitching.d.ts.map +1 -1
- package/dist/esm/Canvas/utils/General/imageStitching.js +3 -6
- package/dist/esm/Canvas/utils/General/imageStitching.js.map +1 -1
- package/dist/esm/Canvas/utils/Image/imageMasking.d.ts.map +1 -1
- package/dist/esm/Canvas/utils/Image/imageMasking.js +5 -12
- package/dist/esm/Canvas/utils/Image/imageMasking.js.map +1 -1
- package/dist/esm/Canvas/utils/Image/imageProperties.d.ts +4 -4
- package/dist/esm/Canvas/utils/Image/imageProperties.d.ts.map +1 -1
- package/dist/esm/Canvas/utils/Image/imageProperties.js +44 -9
- package/dist/esm/Canvas/utils/Image/imageProperties.js.map +1 -1
- package/dist/esm/Canvas/utils/Texts/enhancedTextRenderer.d.ts +5 -0
- package/dist/esm/Canvas/utils/Texts/enhancedTextRenderer.d.ts.map +1 -1
- package/dist/esm/Canvas/utils/Texts/enhancedTextRenderer.js +48 -5
- package/dist/esm/Canvas/utils/Texts/enhancedTextRenderer.js.map +1 -1
- package/dist/esm/Canvas/utils/Texts/textProperties.d.ts +1 -1
- package/dist/esm/Canvas/utils/Texts/textProperties.d.ts.map +1 -1
- package/dist/esm/Canvas/utils/Texts/textProperties.js +48 -5
- package/dist/esm/Canvas/utils/Texts/textProperties.js.map +1 -1
- package/dist/esm/Canvas/utils/Video/videoHelpers.d.ts +489 -0
- package/dist/esm/Canvas/utils/Video/videoHelpers.d.ts.map +1 -0
- package/dist/esm/Canvas/utils/Video/videoHelpers.js +1835 -0
- package/dist/esm/Canvas/utils/Video/videoHelpers.js.map +1 -0
- package/dist/esm/Canvas/utils/errorUtils.d.ts +15 -0
- package/dist/esm/Canvas/utils/errorUtils.d.ts.map +1 -0
- package/dist/esm/Canvas/utils/errorUtils.js +26 -0
- package/dist/esm/Canvas/utils/errorUtils.js.map +1 -0
- package/dist/esm/Canvas/utils/types.d.ts +17 -178
- package/dist/esm/Canvas/utils/types.d.ts.map +1 -1
- package/dist/esm/Canvas/utils/types.js.map +1 -1
- package/dist/esm/Canvas/utils/utils.d.ts +4 -3
- package/dist/esm/Canvas/utils/utils.d.ts.map +1 -1
- package/dist/esm/Canvas/utils/utils.js +40 -6
- package/dist/esm/Canvas/utils/utils.js.map +1 -1
- package/dist/esm/index.d.ts +1 -8
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +14 -45
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
- package/package.json +234 -198
- package/dist/cjs/Canvas/utils/Charts/charts.d.ts +0 -13
- package/dist/cjs/Canvas/utils/Charts/charts.d.ts.map +0 -1
- package/dist/cjs/Canvas/utils/Charts/charts.js +0 -466
- package/dist/cjs/Canvas/utils/Charts/charts.js.map +0 -1
- package/dist/esm/Canvas/utils/Charts/charts.d.ts +0 -13
- package/dist/esm/Canvas/utils/Charts/charts.d.ts.map +0 -1
- package/dist/esm/Canvas/utils/Charts/charts.js +0 -466
- package/dist/esm/Canvas/utils/Charts/charts.js.map +0 -1
- package/lib/Canvas/ApexPainter.ts +0 -5414
- package/lib/Canvas/utils/Background/bg.ts +0 -285
- package/lib/Canvas/utils/Charts/charts.ts +0 -548
- package/lib/Canvas/utils/Custom/advancedLines.ts +0 -387
- package/lib/Canvas/utils/Custom/customLines.ts +0 -206
- package/lib/Canvas/utils/General/batchOperations.ts +0 -103
- package/lib/Canvas/utils/General/conversion.ts +0 -34
- package/lib/Canvas/utils/General/general functions.ts +0 -726
- package/lib/Canvas/utils/General/imageCompression.ts +0 -316
- package/lib/Canvas/utils/General/imageStitching.ts +0 -252
- package/lib/Canvas/utils/Image/imageEffects.ts +0 -175
- package/lib/Canvas/utils/Image/imageFilters.ts +0 -356
- package/lib/Canvas/utils/Image/imageMasking.ts +0 -335
- package/lib/Canvas/utils/Image/imageProperties.ts +0 -587
- package/lib/Canvas/utils/Image/professionalImageFilters.ts +0 -391
- package/lib/Canvas/utils/Image/simpleProfessionalFilters.ts +0 -229
- package/lib/Canvas/utils/Patterns/enhancedPatternRenderer.ts +0 -455
- package/lib/Canvas/utils/Shapes/shapes.ts +0 -528
- package/lib/Canvas/utils/Texts/enhancedTextRenderer.ts +0 -716
- package/lib/Canvas/utils/Texts/textPathRenderer.ts +0 -320
- package/lib/Canvas/utils/Texts/textProperties.ts +0 -231
- package/lib/Canvas/utils/types.ts +0 -983
- package/lib/Canvas/utils/utils.ts +0 -135
- package/lib/index.ts +0 -81
- package/lib/utils.ts +0 -5
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { CanvasConfig } from "../utils/utils";
|
|
2
|
+
export interface CanvasResults {
|
|
3
|
+
buffer: Buffer;
|
|
4
|
+
canvas: CanvasConfig;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Extended class for canvas creation functionality
|
|
8
|
+
*/
|
|
9
|
+
export declare class CanvasCreator {
|
|
10
|
+
/**
|
|
11
|
+
* Extracts a video frame (helper method - will be passed from ApexPainter)
|
|
12
|
+
*/
|
|
13
|
+
private extractVideoFrame?;
|
|
14
|
+
/**
|
|
15
|
+
* Sets the extractVideoFrame method (dependency injection)
|
|
16
|
+
*/
|
|
17
|
+
setExtractVideoFrame(method: (videoSource: string | Buffer, frameNumber?: number, timeSeconds?: number, outputFormat?: 'jpg' | 'png', quality?: number) => Promise<Buffer | null>): void;
|
|
18
|
+
/**
|
|
19
|
+
* Validates canvas configuration.
|
|
20
|
+
* @private
|
|
21
|
+
* @param canvas - Canvas configuration to validate
|
|
22
|
+
*/
|
|
23
|
+
private validateCanvasConfig;
|
|
24
|
+
/**
|
|
25
|
+
* Creates a canvas with the given configuration.
|
|
26
|
+
* Applies rotation, shadow, border effects, background, and stroke.
|
|
27
|
+
*
|
|
28
|
+
* @param canvas - Canvas configuration object
|
|
29
|
+
* @returns Promise<CanvasResults> - Object containing canvas buffer and configuration
|
|
30
|
+
*/
|
|
31
|
+
createCanvas(canvas: CanvasConfig): Promise<CanvasResults>;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=CanvasCreator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CanvasCreator.d.ts","sourceRoot":"","sources":["../../../../lib/Canvas/extended/CanvasCreator.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAgBnD,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,YAAY,CAAC;CACtB;AAED;;GAEG;AACH,qBAAa,aAAa;IACxB;;OAEG;IACH,OAAO,CAAC,iBAAiB,CAAC,CAME;IAE5B;;OAEG;IACH,oBAAoB,CAClB,MAAM,EAAE,CACN,WAAW,EAAE,MAAM,GAAG,MAAM,EAC5B,WAAW,CAAC,EAAE,MAAM,EACpB,WAAW,CAAC,EAAE,MAAM,EACpB,YAAY,CAAC,EAAE,KAAK,GAAG,KAAK,EAC5B,OAAO,CAAC,EAAE,MAAM,KACb,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,GAC1B,IAAI;IAIP;;;;OAIG;IACH,OAAO,CAAC,oBAAoB;IAsB5B;;;;;;OAMG;IACG,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC;CA2LjE"}
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.CanvasCreator = void 0;
|
|
7
|
+
const canvas_1 = require("@napi-rs/canvas");
|
|
8
|
+
const path_1 = __importDefault(require("path"));
|
|
9
|
+
const fs_1 = __importDefault(require("fs"));
|
|
10
|
+
const errorUtils_1 = require("../utils/errorUtils");
|
|
11
|
+
const utils_1 = require("../utils/utils");
|
|
12
|
+
const enhancedPatternRenderer_1 = require("../utils/Patterns/enhancedPatternRenderer");
|
|
13
|
+
const simpleProfessionalFilters_1 = require("../utils/Image/simpleProfessionalFilters");
|
|
14
|
+
/**
|
|
15
|
+
* Extended class for canvas creation functionality
|
|
16
|
+
*/
|
|
17
|
+
class CanvasCreator {
|
|
18
|
+
/**
|
|
19
|
+
* Extracts a video frame (helper method - will be passed from ApexPainter)
|
|
20
|
+
*/
|
|
21
|
+
extractVideoFrame;
|
|
22
|
+
/**
|
|
23
|
+
* Sets the extractVideoFrame method (dependency injection)
|
|
24
|
+
*/
|
|
25
|
+
setExtractVideoFrame(method) {
|
|
26
|
+
this.extractVideoFrame = method;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Validates canvas configuration.
|
|
30
|
+
* @private
|
|
31
|
+
* @param canvas - Canvas configuration to validate
|
|
32
|
+
*/
|
|
33
|
+
validateCanvasConfig(canvas) {
|
|
34
|
+
if (!canvas) {
|
|
35
|
+
throw new Error("createCanvas: canvas configuration is required.");
|
|
36
|
+
}
|
|
37
|
+
if (canvas.width !== undefined && (typeof canvas.width !== 'number' || canvas.width <= 0)) {
|
|
38
|
+
throw new Error("createCanvas: width must be a positive number.");
|
|
39
|
+
}
|
|
40
|
+
if (canvas.height !== undefined && (typeof canvas.height !== 'number' || canvas.height <= 0)) {
|
|
41
|
+
throw new Error("createCanvas: height must be a positive number.");
|
|
42
|
+
}
|
|
43
|
+
if (canvas.opacity !== undefined && (typeof canvas.opacity !== 'number' || canvas.opacity < 0 || canvas.opacity > 1)) {
|
|
44
|
+
throw new Error("createCanvas: opacity must be a number between 0 and 1.");
|
|
45
|
+
}
|
|
46
|
+
if (canvas.zoom?.scale !== undefined && (typeof canvas.zoom.scale !== 'number' || canvas.zoom.scale <= 0)) {
|
|
47
|
+
throw new Error("createCanvas: zoom.scale must be a positive number.");
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Creates a canvas with the given configuration.
|
|
52
|
+
* Applies rotation, shadow, border effects, background, and stroke.
|
|
53
|
+
*
|
|
54
|
+
* @param canvas - Canvas configuration object
|
|
55
|
+
* @returns Promise<CanvasResults> - Object containing canvas buffer and configuration
|
|
56
|
+
*/
|
|
57
|
+
async createCanvas(canvas) {
|
|
58
|
+
try {
|
|
59
|
+
// Validate canvas configuration
|
|
60
|
+
this.validateCanvasConfig(canvas);
|
|
61
|
+
// Handle inherit sizing
|
|
62
|
+
if (canvas.customBg?.inherit) {
|
|
63
|
+
let p = canvas.customBg.source;
|
|
64
|
+
if (!/^https?:\/\//i.test(p))
|
|
65
|
+
p = path_1.default.join(process.cwd(), p);
|
|
66
|
+
try {
|
|
67
|
+
const img = await (0, canvas_1.loadImage)(p);
|
|
68
|
+
canvas.width = img.width;
|
|
69
|
+
canvas.height = img.height;
|
|
70
|
+
}
|
|
71
|
+
catch (e) {
|
|
72
|
+
const errorMessage = e instanceof Error ? e.message : String(e);
|
|
73
|
+
throw new Error(`createCanvas: Failed to load image for inherit sizing: ${errorMessage}`);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
// Handle video background inherit sizing
|
|
77
|
+
if (canvas.videoBg && this.extractVideoFrame) {
|
|
78
|
+
try {
|
|
79
|
+
const frameBuffer = await this.extractVideoFrame(canvas.videoBg.source, canvas.videoBg.frame ?? 0, canvas.videoBg.time, canvas.videoBg.format || 'jpg', canvas.videoBg.quality || 2);
|
|
80
|
+
if (frameBuffer) {
|
|
81
|
+
const img = await (0, canvas_1.loadImage)(frameBuffer);
|
|
82
|
+
if (!canvas.width)
|
|
83
|
+
canvas.width = img.width;
|
|
84
|
+
if (!canvas.height)
|
|
85
|
+
canvas.height = img.height;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
catch (e) {
|
|
89
|
+
console.warn('createCanvas: Failed to extract video frame for sizing, using defaults');
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
// Use final width/height after inherit
|
|
93
|
+
const width = canvas.width ?? 500;
|
|
94
|
+
const height = canvas.height ?? 500;
|
|
95
|
+
const { x = 0, y = 0, rotation = 0, borderRadius = 0, borderPosition = 'all', opacity = 1, colorBg, customBg, gradientBg, videoBg, patternBg, noiseBg, blendMode, zoom, stroke, shadow, blur } = canvas;
|
|
96
|
+
// Validate background configuration
|
|
97
|
+
const bgSources = [
|
|
98
|
+
canvas.colorBg ? 'colorBg' : null,
|
|
99
|
+
canvas.gradientBg ? 'gradientBg' : null,
|
|
100
|
+
canvas.customBg ? 'customBg' : null
|
|
101
|
+
].filter(Boolean);
|
|
102
|
+
if (bgSources.length > 1) {
|
|
103
|
+
throw new Error(`createCanvas: only one of colorBg, gradientBg, or customBg can be used. You provided: ${bgSources.join(', ')}`);
|
|
104
|
+
}
|
|
105
|
+
const cv = (0, canvas_1.createCanvas)(width, height);
|
|
106
|
+
const ctx = (0, errorUtils_1.getCanvasContext)(cv);
|
|
107
|
+
ctx.globalAlpha = opacity;
|
|
108
|
+
// ---- BACKGROUND (clipped) ----
|
|
109
|
+
ctx.save();
|
|
110
|
+
(0, utils_1.applyRotation)(ctx, rotation, x, y, width, height);
|
|
111
|
+
(0, utils_1.buildPath)(ctx, x, y, width, height, borderRadius, borderPosition);
|
|
112
|
+
ctx.clip();
|
|
113
|
+
(0, utils_1.applyCanvasZoom)(ctx, width, height, zoom);
|
|
114
|
+
ctx.translate(x, y);
|
|
115
|
+
if (typeof blendMode === 'string') {
|
|
116
|
+
ctx.globalCompositeOperation = blendMode;
|
|
117
|
+
}
|
|
118
|
+
// Draw background - videoBg takes priority, then customBg, then gradientBg, then colorBg
|
|
119
|
+
if (videoBg && this.extractVideoFrame) {
|
|
120
|
+
try {
|
|
121
|
+
// For videoBg, always use PNG format to ensure compatibility with loadImage
|
|
122
|
+
const frameBuffer = await this.extractVideoFrame(videoBg.source, videoBg.frame ?? 0, videoBg.time, 'png', // Force PNG format for videoBg
|
|
123
|
+
2);
|
|
124
|
+
if (frameBuffer && frameBuffer.length > 0) {
|
|
125
|
+
let videoImg;
|
|
126
|
+
try {
|
|
127
|
+
videoImg = await (0, canvas_1.loadImage)(frameBuffer);
|
|
128
|
+
}
|
|
129
|
+
catch (bufferError) {
|
|
130
|
+
// If loading from buffer fails, try saving to temp file and loading from file
|
|
131
|
+
const tempFramePath = path_1.default.join(process.cwd(), '.temp-frames', `video-bg-temp-${Date.now()}.png`);
|
|
132
|
+
const frameDir = path_1.default.dirname(tempFramePath);
|
|
133
|
+
if (!fs_1.default.existsSync(frameDir)) {
|
|
134
|
+
fs_1.default.mkdirSync(frameDir, { recursive: true });
|
|
135
|
+
}
|
|
136
|
+
fs_1.default.writeFileSync(tempFramePath, frameBuffer);
|
|
137
|
+
videoImg = await (0, canvas_1.loadImage)(tempFramePath);
|
|
138
|
+
// Cleanup temp file after loading
|
|
139
|
+
if (fs_1.default.existsSync(tempFramePath)) {
|
|
140
|
+
fs_1.default.unlinkSync(tempFramePath);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
if (videoImg && videoImg.width > 0 && videoImg.height > 0) {
|
|
144
|
+
ctx.globalAlpha = videoBg.opacity ?? 1;
|
|
145
|
+
ctx.drawImage(videoImg, 0, 0, width, height);
|
|
146
|
+
ctx.globalAlpha = opacity;
|
|
147
|
+
}
|
|
148
|
+
else {
|
|
149
|
+
throw new Error(`Extracted video frame has invalid dimensions: ${videoImg?.width}x${videoImg?.height}`);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
else {
|
|
153
|
+
throw new Error('Frame extraction returned empty buffer');
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
catch (e) {
|
|
157
|
+
const errorMsg = e instanceof Error ? e.message : 'Unknown error';
|
|
158
|
+
if (errorMsg.includes('FFMPEG NOT FOUND') || errorMsg.includes('FFmpeg')) {
|
|
159
|
+
throw e;
|
|
160
|
+
}
|
|
161
|
+
throw new Error(`createCanvas: videoBg extraction failed: ${errorMsg}`);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
else if (customBg) {
|
|
165
|
+
// Draw custom background with filters and opacity support
|
|
166
|
+
await (0, utils_1.customBackground)(ctx, { ...canvas, blur });
|
|
167
|
+
// Apply filters to background if specified
|
|
168
|
+
if (customBg.filters && customBg.filters.length > 0) {
|
|
169
|
+
const tempCanvas = (0, canvas_1.createCanvas)(width, height);
|
|
170
|
+
const tempCtx = tempCanvas.getContext('2d');
|
|
171
|
+
if (tempCtx) {
|
|
172
|
+
tempCtx.drawImage(cv, 0, 0);
|
|
173
|
+
await (0, simpleProfessionalFilters_1.applySimpleProfessionalFilters)(tempCtx, customBg.filters, width, height);
|
|
174
|
+
ctx.clearRect(0, 0, width, height);
|
|
175
|
+
ctx.globalAlpha = customBg.opacity ?? 1;
|
|
176
|
+
ctx.drawImage(tempCanvas, 0, 0);
|
|
177
|
+
ctx.globalAlpha = opacity;
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
else if (customBg.opacity !== undefined && customBg.opacity !== 1) {
|
|
181
|
+
ctx.globalAlpha = customBg.opacity;
|
|
182
|
+
await (0, utils_1.customBackground)(ctx, { ...canvas, blur });
|
|
183
|
+
ctx.globalAlpha = opacity;
|
|
184
|
+
}
|
|
185
|
+
else {
|
|
186
|
+
await (0, utils_1.customBackground)(ctx, { ...canvas, blur });
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
else if (gradientBg) {
|
|
190
|
+
await (0, utils_1.drawBackgroundGradient)(ctx, { ...canvas, blur });
|
|
191
|
+
}
|
|
192
|
+
else {
|
|
193
|
+
// Default to black background if no background is specified
|
|
194
|
+
await (0, utils_1.drawBackgroundColor)(ctx, { ...canvas, blur, colorBg: colorBg ?? '#000' });
|
|
195
|
+
}
|
|
196
|
+
if (patternBg)
|
|
197
|
+
await enhancedPatternRenderer_1.EnhancedPatternRenderer.renderPattern(ctx, cv, patternBg);
|
|
198
|
+
if (noiseBg)
|
|
199
|
+
(0, utils_1.applyNoise)(ctx, width, height, noiseBg.intensity ?? 0.05);
|
|
200
|
+
ctx.restore();
|
|
201
|
+
// Apply shadow effect
|
|
202
|
+
if (shadow) {
|
|
203
|
+
ctx.save();
|
|
204
|
+
(0, utils_1.buildPath)(ctx, x, y, width, height, borderRadius, borderPosition);
|
|
205
|
+
(0, utils_1.applyShadow)(ctx, shadow, x, y, width, height);
|
|
206
|
+
ctx.restore();
|
|
207
|
+
}
|
|
208
|
+
// Apply stroke effect
|
|
209
|
+
if (stroke) {
|
|
210
|
+
ctx.save();
|
|
211
|
+
(0, utils_1.buildPath)(ctx, x, y, width, height, borderRadius, borderPosition);
|
|
212
|
+
(0, utils_1.applyStroke)(ctx, stroke, x, y, width, height);
|
|
213
|
+
ctx.restore();
|
|
214
|
+
}
|
|
215
|
+
return { buffer: cv.toBuffer('image/png'), canvas };
|
|
216
|
+
}
|
|
217
|
+
catch (error) {
|
|
218
|
+
throw new Error(`createCanvas failed: ${(0, errorUtils_1.getErrorMessage)(error)}`);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
exports.CanvasCreator = CanvasCreator;
|
|
223
|
+
//# sourceMappingURL=CanvasCreator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CanvasCreator.js","sourceRoot":"","sources":["../../../../lib/Canvas/extended/CanvasCreator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Extended class for chart creation functionality
|
|
3
|
+
*/
|
|
4
|
+
export declare class ChartCreator {
|
|
5
|
+
/**
|
|
6
|
+
* Creates a chart based on the specified type.
|
|
7
|
+
*
|
|
8
|
+
* @param chartType - Type of chart to create ('pie', 'bar', 'horizontalBar', 'line')
|
|
9
|
+
* @param data - Chart data (type depends on chartType)
|
|
10
|
+
* @param options - Chart options (type depends on chartType)
|
|
11
|
+
* @returns Promise<Buffer> - Chart image buffer
|
|
12
|
+
*/
|
|
13
|
+
createChart(chartType: 'pie', data: import('../utils/Charts/piechart').PieSlice[], options?: import('../utils/Charts/piechart').PieChartOptions): Promise<Buffer>;
|
|
14
|
+
createChart(chartType: 'bar', data: import('../utils/Charts/barchart').BarChartData[], options?: import('../utils/Charts/barchart').BarChartOptions): Promise<Buffer>;
|
|
15
|
+
createChart(chartType: 'horizontalBar', data: import('../utils/Charts/horizontalbarchart').HorizontalBarChartData[], options?: import('../utils/Charts/horizontalbarchart').HorizontalBarChartOptions): Promise<Buffer>;
|
|
16
|
+
createChart(chartType: 'line', data: import('../utils/Charts/linechart').LineSeries[], options?: import('../utils/Charts/linechart').LineChartOptions): Promise<Buffer>;
|
|
17
|
+
/**
|
|
18
|
+
* Creates a comparison chart with two charts side by side or top/bottom.
|
|
19
|
+
* Each chart can be of any type (pie, bar, horizontalBar, line, donut) with its own data and config.
|
|
20
|
+
*
|
|
21
|
+
* @param options - Comparison chart configuration
|
|
22
|
+
* @returns Promise<Buffer> - Comparison chart image buffer
|
|
23
|
+
*/
|
|
24
|
+
createComparisonChart(options: import('../utils/Charts/comparisonchart').ComparisonChartOptions): Promise<Buffer>;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=ChartCreator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChartCreator.d.ts","sourceRoot":"","sources":["../../../../lib/Canvas/extended/ChartCreator.ts"],"names":[],"mappings":"AAOA;;GAEG;AACH,qBAAa,YAAY;IACvB;;;;;;;OAOG;IACG,WAAW,CACf,SAAS,EAAE,KAAK,EAChB,IAAI,EAAE,OAAO,0BAA0B,EAAE,QAAQ,EAAE,EACnD,OAAO,CAAC,EAAE,OAAO,0BAA0B,EAAE,eAAe,GAC3D,OAAO,CAAC,MAAM,CAAC;IACZ,WAAW,CACf,SAAS,EAAE,KAAK,EAChB,IAAI,EAAE,OAAO,0BAA0B,EAAE,YAAY,EAAE,EACvD,OAAO,CAAC,EAAE,OAAO,0BAA0B,EAAE,eAAe,GAC3D,OAAO,CAAC,MAAM,CAAC;IACZ,WAAW,CACf,SAAS,EAAE,eAAe,EAC1B,IAAI,EAAE,OAAO,oCAAoC,EAAE,sBAAsB,EAAE,EAC3E,OAAO,CAAC,EAAE,OAAO,oCAAoC,EAAE,yBAAyB,GAC/E,OAAO,CAAC,MAAM,CAAC;IACZ,WAAW,CACf,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,OAAO,2BAA2B,EAAE,UAAU,EAAE,EACtD,OAAO,CAAC,EAAE,OAAO,2BAA2B,EAAE,gBAAgB,GAC7D,OAAO,CAAC,MAAM,CAAC;IA4BlB;;;;;;OAMG;IACG,qBAAqB,CACzB,OAAO,EAAE,OAAO,iCAAiC,EAAE,sBAAsB,GACxE,OAAO,CAAC,MAAM,CAAC;CAOnB"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ChartCreator = void 0;
|
|
4
|
+
const piechart_1 = require("../utils/Charts/piechart");
|
|
5
|
+
const barchart_1 = require("../utils/Charts/barchart");
|
|
6
|
+
const horizontalbarchart_1 = require("../utils/Charts/horizontalbarchart");
|
|
7
|
+
const linechart_1 = require("../utils/Charts/linechart");
|
|
8
|
+
const comparisonchart_1 = require("../utils/Charts/comparisonchart");
|
|
9
|
+
const errorUtils_1 = require("../utils/errorUtils");
|
|
10
|
+
/**
|
|
11
|
+
* Extended class for chart creation functionality
|
|
12
|
+
*/
|
|
13
|
+
class ChartCreator {
|
|
14
|
+
async createChart(chartType, data, options = {}) {
|
|
15
|
+
try {
|
|
16
|
+
switch (chartType) {
|
|
17
|
+
case 'pie':
|
|
18
|
+
return await (0, piechart_1.createPieChart)(data, options);
|
|
19
|
+
case 'bar':
|
|
20
|
+
return await (0, barchart_1.createBarChart)(data, options);
|
|
21
|
+
case 'horizontalBar':
|
|
22
|
+
return await (0, horizontalbarchart_1.createHorizontalBarChart)(data, options);
|
|
23
|
+
case 'line':
|
|
24
|
+
return await (0, linechart_1.createLineChart)(data, options);
|
|
25
|
+
default:
|
|
26
|
+
throw new Error(`Unsupported chart type: ${chartType}`);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
catch (error) {
|
|
30
|
+
throw new Error(`createChart failed for type '${chartType}': ${(0, errorUtils_1.getErrorMessage)(error)}`);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Creates a comparison chart with two charts side by side or top/bottom.
|
|
35
|
+
* Each chart can be of any type (pie, bar, horizontalBar, line, donut) with its own data and config.
|
|
36
|
+
*
|
|
37
|
+
* @param options - Comparison chart configuration
|
|
38
|
+
* @returns Promise<Buffer> - Comparison chart image buffer
|
|
39
|
+
*/
|
|
40
|
+
async createComparisonChart(options) {
|
|
41
|
+
try {
|
|
42
|
+
return await (0, comparisonchart_1.createComparisonChart)(options);
|
|
43
|
+
}
|
|
44
|
+
catch (error) {
|
|
45
|
+
throw new Error(`createComparisonChart failed: ${(0, errorUtils_1.getErrorMessage)(error)}`);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
exports.ChartCreator = ChartCreator;
|
|
50
|
+
//# sourceMappingURL=ChartCreator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChartCreator.js","sourceRoot":"","sources":["../../../../lib/Canvas/extended/ChartCreator.ts"],"names":[],"mappings":";;;AAAA,uDAA0D;AAC1D,uDAA0D;AAC1D,2EAA8E;AAC9E,yDAA4D;AAC5D,qEAAwE;AACxE,oDAAsD;AAEtD;;GAEG;AACH,MAAa,YAAY;IA6BvB,KAAK,CAAC,WAAW,CACf,SAAmD,EACnD,IAAS,EACT,UAAe,EAAE;QAEjB,IAAI,CAAC;YACH,QAAQ,SAAS,EAAE,CAAC;gBAClB,KAAK,KAAK;oBACR,OAAO,MAAM,IAAA,yBAAc,EAAC,IAAI,EAAE,OAAO,CAAC,CAAC;gBAE7C,KAAK,KAAK;oBACR,OAAO,MAAM,IAAA,yBAAc,EAAC,IAAI,EAAE,OAAO,CAAC,CAAC;gBAE7C,KAAK,eAAe;oBAClB,OAAO,MAAM,IAAA,6CAAwB,EAAC,IAAI,EAAE,OAAO,CAAC,CAAC;gBAEvD,KAAK,MAAM;oBACT,OAAO,MAAM,IAAA,2BAAe,EAAC,IAAI,EAAE,OAAO,CAAC,CAAC;gBAE9C;oBACE,MAAM,IAAI,KAAK,CAAC,2BAA2B,SAAS,EAAE,CAAC,CAAC;YAC5D,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,gCAAgC,SAAS,MAAM,IAAA,4BAAe,EAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC3F,CAAC;IACH,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,qBAAqB,CACzB,OAAyE;QAEzE,IAAI,CAAC;YACH,OAAO,MAAM,IAAA,uCAAqB,EAAC,OAAO,CAAC,CAAC;QAC9C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,iCAAiC,IAAA,4BAAe,EAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC7E,CAAC;IACH,CAAC;CACF;AAxED,oCAwEC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { GIFOptions, GIFResults } from "../utils/utils";
|
|
2
|
+
/**
|
|
3
|
+
* Extended class for GIF creation functionality
|
|
4
|
+
*/
|
|
5
|
+
export declare class GIFCreator {
|
|
6
|
+
/**
|
|
7
|
+
* Validates GIF options and frames.
|
|
8
|
+
* @private
|
|
9
|
+
* @param gifFrames - GIF frames to validate
|
|
10
|
+
* @param options - GIF options to validate
|
|
11
|
+
*/
|
|
12
|
+
private validateGIFOptions;
|
|
13
|
+
/**
|
|
14
|
+
* Resizes an image to target dimensions
|
|
15
|
+
* @private
|
|
16
|
+
*/
|
|
17
|
+
private resizeImage;
|
|
18
|
+
/**
|
|
19
|
+
* Creates a file output stream
|
|
20
|
+
* @private
|
|
21
|
+
*/
|
|
22
|
+
private createOutputStream;
|
|
23
|
+
/**
|
|
24
|
+
* Creates a buffer stream with getBuffer method
|
|
25
|
+
* @private
|
|
26
|
+
*/
|
|
27
|
+
private createBufferStream;
|
|
28
|
+
/**
|
|
29
|
+
* Creates a GIF from frames
|
|
30
|
+
*
|
|
31
|
+
* @param gifFrames - Array of frames with background and duration
|
|
32
|
+
* @param options - GIF creation options
|
|
33
|
+
* @returns Promise<GIFResults | Buffer | string | Array<{ attachment: NodeJS.ReadableStream | any; name: string }> | undefined>
|
|
34
|
+
*/
|
|
35
|
+
createGIF(gifFrames: {
|
|
36
|
+
background: string;
|
|
37
|
+
duration: number;
|
|
38
|
+
}[], options: GIFOptions): Promise<GIFResults | Buffer | string | Array<{
|
|
39
|
+
attachment: NodeJS.ReadableStream | any;
|
|
40
|
+
name: string;
|
|
41
|
+
}> | undefined>;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=GIFCreator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GIFCreator.d.ts","sourceRoot":"","sources":["../../../../lib/Canvas/extended/GIFCreator.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAG7D;;GAEG;AACH,qBAAa,UAAU;IACrB;;;;;OAKG;IACH,OAAO,CAAC,kBAAkB;IAuB1B;;;OAGG;YACW,WAAW;IAOzB;;;OAGG;IACH,OAAO,CAAC,kBAAkB;IAI1B;;;OAGG;IACH,OAAO,CAAC,kBAAkB;IAiB1B;;;;;;OAMG;IACG,SAAS,CACb,SAAS,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,EAAE,EACrD,OAAO,EAAE,UAAU,GAClB,OAAO,CAAC,UAAU,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC;QAAE,UAAU,EAAE,MAAM,CAAC,cAAc,GAAG,GAAG,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,SAAS,CAAC;CA6ExH"}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.GIFCreator = void 0;
|
|
7
|
+
const canvas_1 = require("@napi-rs/canvas");
|
|
8
|
+
const gifencoder_1 = __importDefault(require("gifencoder"));
|
|
9
|
+
const stream_1 = require("stream");
|
|
10
|
+
const fs_1 = __importDefault(require("fs"));
|
|
11
|
+
const errorUtils_1 = require("../utils/errorUtils");
|
|
12
|
+
/**
|
|
13
|
+
* Extended class for GIF creation functionality
|
|
14
|
+
*/
|
|
15
|
+
class GIFCreator {
|
|
16
|
+
/**
|
|
17
|
+
* Validates GIF options and frames.
|
|
18
|
+
* @private
|
|
19
|
+
* @param gifFrames - GIF frames to validate
|
|
20
|
+
* @param options - GIF options to validate
|
|
21
|
+
*/
|
|
22
|
+
validateGIFOptions(gifFrames, options) {
|
|
23
|
+
if (!gifFrames || gifFrames.length === 0) {
|
|
24
|
+
throw new Error("createGIF: At least one frame is required.");
|
|
25
|
+
}
|
|
26
|
+
for (const frame of gifFrames) {
|
|
27
|
+
if (!frame.background) {
|
|
28
|
+
throw new Error("createGIF: Each frame must have a background property.");
|
|
29
|
+
}
|
|
30
|
+
if (typeof frame.duration !== 'number' || frame.duration < 0) {
|
|
31
|
+
throw new Error("createGIF: Each frame duration must be a non-negative number.");
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
if (options.outputFormat === "file" && !options.outputFile) {
|
|
35
|
+
throw new Error("createGIF: outputFile is required when outputFormat is 'file'.");
|
|
36
|
+
}
|
|
37
|
+
if (options.repeat !== undefined && (typeof options.repeat !== "number" || options.repeat < 0)) {
|
|
38
|
+
throw new Error("createGIF: repeat must be a non-negative number or undefined.");
|
|
39
|
+
}
|
|
40
|
+
if (options.quality !== undefined && (typeof options.quality !== "number" || options.quality < 1 || options.quality > 20)) {
|
|
41
|
+
throw new Error("createGIF: quality must be a number between 1 and 20 or undefined.");
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Resizes an image to target dimensions
|
|
46
|
+
* @private
|
|
47
|
+
*/
|
|
48
|
+
async resizeImage(image, targetWidth, targetHeight) {
|
|
49
|
+
const canvas = (0, canvas_1.createCanvas)(targetWidth, targetHeight);
|
|
50
|
+
const ctx = canvas.getContext("2d");
|
|
51
|
+
ctx.drawImage(image, 0, 0, targetWidth, targetHeight);
|
|
52
|
+
return canvas;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Creates a file output stream
|
|
56
|
+
* @private
|
|
57
|
+
*/
|
|
58
|
+
createOutputStream(outputFile) {
|
|
59
|
+
return fs_1.default.createWriteStream(outputFile);
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Creates a buffer stream with getBuffer method
|
|
63
|
+
* @private
|
|
64
|
+
*/
|
|
65
|
+
createBufferStream() {
|
|
66
|
+
const bufferStream = new stream_1.PassThrough();
|
|
67
|
+
const chunks = [];
|
|
68
|
+
bufferStream.on('data', (chunk) => {
|
|
69
|
+
chunks.push(chunk);
|
|
70
|
+
});
|
|
71
|
+
const extendedStream = bufferStream;
|
|
72
|
+
extendedStream.getBuffer = function () {
|
|
73
|
+
return Buffer.concat(chunks);
|
|
74
|
+
};
|
|
75
|
+
extendedStream.chunks = chunks;
|
|
76
|
+
return extendedStream;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Creates a GIF from frames
|
|
80
|
+
*
|
|
81
|
+
* @param gifFrames - Array of frames with background and duration
|
|
82
|
+
* @param options - GIF creation options
|
|
83
|
+
* @returns Promise<GIFResults | Buffer | string | Array<{ attachment: NodeJS.ReadableStream | any; name: string }> | undefined>
|
|
84
|
+
*/
|
|
85
|
+
async createGIF(gifFrames, options) {
|
|
86
|
+
try {
|
|
87
|
+
this.validateGIFOptions(gifFrames, options);
|
|
88
|
+
const canvasWidth = options.width || 1200;
|
|
89
|
+
const canvasHeight = options.height || 1200;
|
|
90
|
+
const encoder = new gifencoder_1.default(canvasWidth, canvasHeight);
|
|
91
|
+
const useBufferStream = options.outputFormat !== "file";
|
|
92
|
+
const outputStream = useBufferStream
|
|
93
|
+
? this.createBufferStream()
|
|
94
|
+
: (options.outputFile ? this.createOutputStream(options.outputFile) : this.createBufferStream());
|
|
95
|
+
encoder.createReadStream().pipe(outputStream);
|
|
96
|
+
encoder.start();
|
|
97
|
+
encoder.setRepeat(options.repeat || 0);
|
|
98
|
+
encoder.setQuality(options.quality || 10);
|
|
99
|
+
const canvas = (0, canvas_1.createCanvas)(canvasWidth, canvasHeight);
|
|
100
|
+
const ctx = (0, errorUtils_1.getCanvasContext)(canvas);
|
|
101
|
+
for (const frame of gifFrames) {
|
|
102
|
+
const image = await (0, canvas_1.loadImage)(frame.background);
|
|
103
|
+
const resizedImage = await this.resizeImage(image, canvasWidth, canvasHeight);
|
|
104
|
+
ctx.clearRect(0, 0, canvas.width, canvas.height);
|
|
105
|
+
ctx.drawImage(resizedImage, 0, 0);
|
|
106
|
+
if (options.watermark?.enable) {
|
|
107
|
+
const watermark = await (0, canvas_1.loadImage)(options.watermark.url);
|
|
108
|
+
ctx.drawImage(watermark, 10, canvasHeight - watermark.height - 10);
|
|
109
|
+
}
|
|
110
|
+
if (options.textOverlay) {
|
|
111
|
+
ctx.font = `${options.textOverlay.fontSize || 20}px Arial`;
|
|
112
|
+
ctx.fillStyle = options.textOverlay.fontColor || "white";
|
|
113
|
+
ctx.fillText(options.textOverlay.text, options.textOverlay.x || 10, options.textOverlay.y || 30);
|
|
114
|
+
}
|
|
115
|
+
encoder.setDelay(frame.duration);
|
|
116
|
+
encoder.addFrame(ctx);
|
|
117
|
+
}
|
|
118
|
+
encoder.finish();
|
|
119
|
+
if (options.outputFormat === "file") {
|
|
120
|
+
outputStream.end();
|
|
121
|
+
await new Promise((resolve) => outputStream.on("finish", () => resolve()));
|
|
122
|
+
}
|
|
123
|
+
else if (options.outputFormat === "base64") {
|
|
124
|
+
await new Promise((resolve) => {
|
|
125
|
+
outputStream.on("end", () => resolve());
|
|
126
|
+
outputStream.end();
|
|
127
|
+
});
|
|
128
|
+
if ('getBuffer' in outputStream && typeof outputStream.getBuffer === 'function') {
|
|
129
|
+
return outputStream.getBuffer().toString("base64");
|
|
130
|
+
}
|
|
131
|
+
throw new Error("createGIF: Unable to get buffer for base64 output.");
|
|
132
|
+
}
|
|
133
|
+
else if (options.outputFormat === "attachment") {
|
|
134
|
+
const gifStream = encoder.createReadStream();
|
|
135
|
+
return [{ attachment: gifStream, name: "gif.js" }];
|
|
136
|
+
}
|
|
137
|
+
else if (options.outputFormat === "buffer") {
|
|
138
|
+
await new Promise((resolve) => {
|
|
139
|
+
outputStream.on("end", () => resolve());
|
|
140
|
+
outputStream.end();
|
|
141
|
+
});
|
|
142
|
+
if ('getBuffer' in outputStream && typeof outputStream.getBuffer === 'function') {
|
|
143
|
+
return outputStream.getBuffer();
|
|
144
|
+
}
|
|
145
|
+
throw new Error("createGIF: Unable to get buffer for buffer output.");
|
|
146
|
+
}
|
|
147
|
+
else {
|
|
148
|
+
throw new Error("Invalid output format. Supported formats are 'file', 'base64', 'attachment', and 'buffer'.");
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
catch (error) {
|
|
152
|
+
throw new Error(`createGIF failed: ${(0, errorUtils_1.getErrorMessage)(error)}`);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
exports.GIFCreator = GIFCreator;
|
|
157
|
+
//# sourceMappingURL=GIFCreator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GIFCreator.js","sourceRoot":"","sources":["../../../../lib/Canvas/extended/GIFCreator.ts"],"names":[],"mappings":"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"}
|