apexify.js 4.9.30 → 5.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (129) hide show
  1. package/CHANGELOG.md +137 -0
  2. package/README.md +119 -4
  3. package/apex-banner.png +0 -0
  4. package/dist/cjs/Canvas/ApexPainter.d.ts +158 -145
  5. package/dist/cjs/Canvas/ApexPainter.d.ts.map +1 -1
  6. package/dist/cjs/Canvas/ApexPainter.js +1443 -418
  7. package/dist/cjs/Canvas/ApexPainter.js.map +1 -1
  8. package/dist/cjs/Canvas/utils/Charts/charts.d.ts +7 -2
  9. package/dist/cjs/Canvas/utils/Charts/charts.d.ts.map +1 -1
  10. package/dist/cjs/Canvas/utils/Charts/charts.js +3 -1
  11. package/dist/cjs/Canvas/utils/Charts/charts.js.map +1 -1
  12. package/dist/cjs/Canvas/utils/Custom/advancedLines.d.ts +75 -0
  13. package/dist/cjs/Canvas/utils/Custom/advancedLines.d.ts.map +1 -0
  14. package/dist/cjs/Canvas/utils/Custom/advancedLines.js +263 -0
  15. package/dist/cjs/Canvas/utils/Custom/advancedLines.js.map +1 -0
  16. package/dist/cjs/Canvas/utils/Custom/customLines.d.ts +2 -1
  17. package/dist/cjs/Canvas/utils/Custom/customLines.d.ts.map +1 -1
  18. package/dist/cjs/Canvas/utils/Custom/customLines.js +73 -6
  19. package/dist/cjs/Canvas/utils/Custom/customLines.js.map +1 -1
  20. package/dist/cjs/Canvas/utils/General/batchOperations.d.ts +17 -0
  21. package/dist/cjs/Canvas/utils/General/batchOperations.d.ts.map +1 -0
  22. package/dist/cjs/Canvas/utils/General/batchOperations.js +88 -0
  23. package/dist/cjs/Canvas/utils/General/batchOperations.js.map +1 -0
  24. package/dist/cjs/Canvas/utils/General/general functions.d.ts +25 -3
  25. package/dist/cjs/Canvas/utils/General/general functions.d.ts.map +1 -1
  26. package/dist/cjs/Canvas/utils/General/general functions.js +37 -9
  27. package/dist/cjs/Canvas/utils/General/general functions.js.map +1 -1
  28. package/dist/cjs/Canvas/utils/General/imageCompression.d.ts +19 -0
  29. package/dist/cjs/Canvas/utils/General/imageCompression.d.ts.map +1 -0
  30. package/dist/cjs/Canvas/utils/General/imageCompression.js +262 -0
  31. package/dist/cjs/Canvas/utils/General/imageCompression.js.map +1 -0
  32. package/dist/cjs/Canvas/utils/General/imageStitching.d.ts +20 -0
  33. package/dist/cjs/Canvas/utils/General/imageStitching.d.ts.map +1 -0
  34. package/dist/cjs/Canvas/utils/General/imageStitching.js +227 -0
  35. package/dist/cjs/Canvas/utils/General/imageStitching.js.map +1 -0
  36. package/dist/cjs/Canvas/utils/Image/imageEffects.d.ts +37 -0
  37. package/dist/cjs/Canvas/utils/Image/imageEffects.d.ts.map +1 -0
  38. package/dist/cjs/Canvas/utils/Image/imageEffects.js +128 -0
  39. package/dist/cjs/Canvas/utils/Image/imageEffects.js.map +1 -0
  40. package/dist/cjs/Canvas/utils/Image/imageMasking.d.ts +67 -0
  41. package/dist/cjs/Canvas/utils/Image/imageMasking.d.ts.map +1 -0
  42. package/dist/cjs/Canvas/utils/Image/imageMasking.js +276 -0
  43. package/dist/cjs/Canvas/utils/Image/imageMasking.js.map +1 -0
  44. package/dist/cjs/Canvas/utils/Patterns/enhancedPatternRenderer.d.ts.map +1 -1
  45. package/dist/cjs/Canvas/utils/Patterns/enhancedPatternRenderer.js +16 -8
  46. package/dist/cjs/Canvas/utils/Patterns/enhancedPatternRenderer.js.map +1 -1
  47. package/dist/cjs/Canvas/utils/Texts/textPathRenderer.d.ts +17 -0
  48. package/dist/cjs/Canvas/utils/Texts/textPathRenderer.d.ts.map +1 -0
  49. package/dist/cjs/Canvas/utils/Texts/textPathRenderer.js +233 -0
  50. package/dist/cjs/Canvas/utils/Texts/textPathRenderer.js.map +1 -0
  51. package/dist/cjs/Canvas/utils/types.d.ts +153 -0
  52. package/dist/cjs/Canvas/utils/types.d.ts.map +1 -1
  53. package/dist/cjs/Canvas/utils/types.js.map +1 -1
  54. package/dist/cjs/Canvas/utils/utils.d.ts +9 -2
  55. package/dist/cjs/Canvas/utils/utils.d.ts.map +1 -1
  56. package/dist/cjs/Canvas/utils/utils.js +32 -1
  57. package/dist/cjs/Canvas/utils/utils.js.map +1 -1
  58. package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
  59. package/dist/esm/Canvas/ApexPainter.d.ts +158 -145
  60. package/dist/esm/Canvas/ApexPainter.d.ts.map +1 -1
  61. package/dist/esm/Canvas/ApexPainter.js +1443 -418
  62. package/dist/esm/Canvas/ApexPainter.js.map +1 -1
  63. package/dist/esm/Canvas/utils/Charts/charts.d.ts +7 -2
  64. package/dist/esm/Canvas/utils/Charts/charts.d.ts.map +1 -1
  65. package/dist/esm/Canvas/utils/Charts/charts.js +3 -1
  66. package/dist/esm/Canvas/utils/Charts/charts.js.map +1 -1
  67. package/dist/esm/Canvas/utils/Custom/advancedLines.d.ts +75 -0
  68. package/dist/esm/Canvas/utils/Custom/advancedLines.d.ts.map +1 -0
  69. package/dist/esm/Canvas/utils/Custom/advancedLines.js +263 -0
  70. package/dist/esm/Canvas/utils/Custom/advancedLines.js.map +1 -0
  71. package/dist/esm/Canvas/utils/Custom/customLines.d.ts +2 -1
  72. package/dist/esm/Canvas/utils/Custom/customLines.d.ts.map +1 -1
  73. package/dist/esm/Canvas/utils/Custom/customLines.js +73 -6
  74. package/dist/esm/Canvas/utils/Custom/customLines.js.map +1 -1
  75. package/dist/esm/Canvas/utils/General/batchOperations.d.ts +17 -0
  76. package/dist/esm/Canvas/utils/General/batchOperations.d.ts.map +1 -0
  77. package/dist/esm/Canvas/utils/General/batchOperations.js +88 -0
  78. package/dist/esm/Canvas/utils/General/batchOperations.js.map +1 -0
  79. package/dist/esm/Canvas/utils/General/general functions.d.ts +25 -3
  80. package/dist/esm/Canvas/utils/General/general functions.d.ts.map +1 -1
  81. package/dist/esm/Canvas/utils/General/general functions.js +37 -9
  82. package/dist/esm/Canvas/utils/General/general functions.js.map +1 -1
  83. package/dist/esm/Canvas/utils/General/imageCompression.d.ts +19 -0
  84. package/dist/esm/Canvas/utils/General/imageCompression.d.ts.map +1 -0
  85. package/dist/esm/Canvas/utils/General/imageCompression.js +262 -0
  86. package/dist/esm/Canvas/utils/General/imageCompression.js.map +1 -0
  87. package/dist/esm/Canvas/utils/General/imageStitching.d.ts +20 -0
  88. package/dist/esm/Canvas/utils/General/imageStitching.d.ts.map +1 -0
  89. package/dist/esm/Canvas/utils/General/imageStitching.js +227 -0
  90. package/dist/esm/Canvas/utils/General/imageStitching.js.map +1 -0
  91. package/dist/esm/Canvas/utils/Image/imageEffects.d.ts +37 -0
  92. package/dist/esm/Canvas/utils/Image/imageEffects.d.ts.map +1 -0
  93. package/dist/esm/Canvas/utils/Image/imageEffects.js +128 -0
  94. package/dist/esm/Canvas/utils/Image/imageEffects.js.map +1 -0
  95. package/dist/esm/Canvas/utils/Image/imageMasking.d.ts +67 -0
  96. package/dist/esm/Canvas/utils/Image/imageMasking.d.ts.map +1 -0
  97. package/dist/esm/Canvas/utils/Image/imageMasking.js +276 -0
  98. package/dist/esm/Canvas/utils/Image/imageMasking.js.map +1 -0
  99. package/dist/esm/Canvas/utils/Patterns/enhancedPatternRenderer.d.ts.map +1 -1
  100. package/dist/esm/Canvas/utils/Patterns/enhancedPatternRenderer.js +16 -8
  101. package/dist/esm/Canvas/utils/Patterns/enhancedPatternRenderer.js.map +1 -1
  102. package/dist/esm/Canvas/utils/Texts/textPathRenderer.d.ts +17 -0
  103. package/dist/esm/Canvas/utils/Texts/textPathRenderer.d.ts.map +1 -0
  104. package/dist/esm/Canvas/utils/Texts/textPathRenderer.js +233 -0
  105. package/dist/esm/Canvas/utils/Texts/textPathRenderer.js.map +1 -0
  106. package/dist/esm/Canvas/utils/types.d.ts +153 -0
  107. package/dist/esm/Canvas/utils/types.d.ts.map +1 -1
  108. package/dist/esm/Canvas/utils/types.js.map +1 -1
  109. package/dist/esm/Canvas/utils/utils.d.ts +9 -2
  110. package/dist/esm/Canvas/utils/utils.d.ts.map +1 -1
  111. package/dist/esm/Canvas/utils/utils.js +32 -1
  112. package/dist/esm/Canvas/utils/utils.js.map +1 -1
  113. package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
  114. package/lib/Canvas/ApexPainter.ts +1327 -266
  115. package/lib/Canvas/utils/Charts/charts.ts +16 -7
  116. package/lib/Canvas/utils/Custom/advancedLines.ts +335 -0
  117. package/lib/Canvas/utils/Custom/customLines.ts +84 -9
  118. package/lib/Canvas/utils/General/batchOperations.ts +103 -0
  119. package/lib/Canvas/utils/General/general functions.ts +85 -41
  120. package/lib/Canvas/utils/General/imageCompression.ts +316 -0
  121. package/lib/Canvas/utils/General/imageStitching.ts +252 -0
  122. package/lib/Canvas/utils/Image/imageEffects.ts +175 -0
  123. package/lib/Canvas/utils/Image/imageMasking.ts +335 -0
  124. package/lib/Canvas/utils/Patterns/enhancedPatternRenderer.ts +455 -444
  125. package/lib/Canvas/utils/Texts/textPathRenderer.ts +320 -0
  126. package/lib/Canvas/utils/types.ts +156 -0
  127. package/lib/Canvas/utils/utils.ts +52 -2
  128. package/package.json +75 -35
  129. package/types/imgur.d.ts +65 -0
@@ -0,0 +1,227 @@
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.stitchImages = stitchImages;
7
+ exports.createCollage = createCollage;
8
+ const canvas_1 = require("@napi-rs/canvas");
9
+ const path_1 = __importDefault(require("path"));
10
+ const fs_1 = __importDefault(require("fs"));
11
+ /**
12
+ * Stitches multiple images together
13
+ * @param images - Array of image sources
14
+ * @param options - Stitching options
15
+ * @returns Stitched image buffer
16
+ */
17
+ async function stitchImages(images, options = {}) {
18
+ if (!images || images.length === 0) {
19
+ throw new Error('stitchImages: images array is required');
20
+ }
21
+ const { direction = 'horizontal', overlap = 0, blend = false, spacing = 0 } = options;
22
+ // Load all images
23
+ const loadedImages = [];
24
+ for (const imgSource of images) {
25
+ let img;
26
+ if (Buffer.isBuffer(imgSource)) {
27
+ img = await (0, canvas_1.loadImage)(imgSource);
28
+ }
29
+ else if (imgSource.startsWith('http')) {
30
+ img = await (0, canvas_1.loadImage)(imgSource);
31
+ }
32
+ else {
33
+ const imgPath = path_1.default.join(process.cwd(), imgSource);
34
+ img = await (0, canvas_1.loadImage)(fs_1.default.readFileSync(imgPath));
35
+ }
36
+ loadedImages.push(img);
37
+ }
38
+ if (loadedImages.length === 0) {
39
+ throw new Error('stitchImages: No valid images loaded');
40
+ }
41
+ // Calculate canvas dimensions
42
+ let canvasWidth = 0;
43
+ let canvasHeight = 0;
44
+ let maxWidth = 0;
45
+ let maxHeight = 0;
46
+ for (const img of loadedImages) {
47
+ maxWidth = Math.max(maxWidth, img.width);
48
+ maxHeight = Math.max(maxHeight, img.height);
49
+ }
50
+ if (direction === 'horizontal') {
51
+ canvasWidth = loadedImages.reduce((sum, img) => sum + img.width, 0);
52
+ canvasWidth -= overlap * (loadedImages.length - 1);
53
+ canvasWidth += spacing * (loadedImages.length - 1);
54
+ canvasHeight = maxHeight;
55
+ }
56
+ else if (direction === 'vertical') {
57
+ canvasWidth = maxWidth;
58
+ canvasHeight = loadedImages.reduce((sum, img) => sum + img.height, 0);
59
+ canvasHeight -= overlap * (loadedImages.length - 1);
60
+ canvasHeight += spacing * (loadedImages.length - 1);
61
+ }
62
+ else if (direction === 'grid') {
63
+ const cols = Math.ceil(Math.sqrt(loadedImages.length));
64
+ const rows = Math.ceil(loadedImages.length / cols);
65
+ canvasWidth = maxWidth * cols + spacing * (cols - 1);
66
+ canvasHeight = maxHeight * rows + spacing * (rows - 1);
67
+ }
68
+ // Create canvas
69
+ const canvas = (0, canvas_1.createCanvas)(canvasWidth, canvasHeight);
70
+ const ctx = canvas.getContext('2d');
71
+ if (!ctx)
72
+ throw new Error("Unable to get 2D context");
73
+ // Draw images
74
+ let currentX = 0;
75
+ let currentY = 0;
76
+ for (let i = 0; i < loadedImages.length; i++) {
77
+ const img = loadedImages[i];
78
+ if (direction === 'horizontal') {
79
+ if (i > 0) {
80
+ currentX -= overlap;
81
+ currentX += spacing;
82
+ }
83
+ ctx.drawImage(img, currentX, 0, img.width, img.height);
84
+ currentX += img.width;
85
+ }
86
+ else if (direction === 'vertical') {
87
+ if (i > 0) {
88
+ currentY -= overlap;
89
+ currentY += spacing;
90
+ }
91
+ ctx.drawImage(img, 0, currentY, img.width, img.height);
92
+ currentY += img.height;
93
+ }
94
+ else if (direction === 'grid') {
95
+ const cols = Math.ceil(Math.sqrt(loadedImages.length));
96
+ const col = i % cols;
97
+ const row = Math.floor(i / cols);
98
+ const x = col * (maxWidth + spacing);
99
+ const y = row * (maxHeight + spacing);
100
+ ctx.drawImage(img, x, y, img.width, img.height);
101
+ }
102
+ // Apply blending if enabled and not first image
103
+ if (blend && i > 0 && overlap > 0) {
104
+ ctx.globalCompositeOperation = 'multiply';
105
+ ctx.globalAlpha = 0.5;
106
+ if (direction === 'horizontal') {
107
+ ctx.drawImage(img, currentX - img.width - spacing + overlap, 0, img.width, img.height);
108
+ }
109
+ else if (direction === 'vertical') {
110
+ ctx.drawImage(img, 0, currentY - img.height - spacing + overlap, img.width, img.height);
111
+ }
112
+ ctx.globalAlpha = 1;
113
+ ctx.globalCompositeOperation = 'source-over';
114
+ }
115
+ }
116
+ return canvas.toBuffer('image/png');
117
+ }
118
+ /**
119
+ * Creates an image collage
120
+ * @param images - Array of image sources with optional dimensions
121
+ * @param layout - Collage layout configuration
122
+ * @returns Collage image buffer
123
+ */
124
+ async function createCollage(images, layout) {
125
+ if (!images || images.length === 0) {
126
+ throw new Error('createCollage: images array is required');
127
+ }
128
+ const { type = 'grid', columns = 3, rows = 3, spacing = 10, background = '#ffffff', borderRadius = 0 } = layout;
129
+ // Load all images
130
+ const loadedImages = [];
131
+ for (const imgConfig of images) {
132
+ let img;
133
+ if (Buffer.isBuffer(imgConfig.source)) {
134
+ img = await (0, canvas_1.loadImage)(imgConfig.source);
135
+ }
136
+ else if (typeof imgConfig.source === 'string' && imgConfig.source.startsWith('http')) {
137
+ img = await (0, canvas_1.loadImage)(imgConfig.source);
138
+ }
139
+ else {
140
+ const imgPath = path_1.default.join(process.cwd(), imgConfig.source);
141
+ img = await (0, canvas_1.loadImage)(fs_1.default.readFileSync(imgPath));
142
+ }
143
+ loadedImages.push({
144
+ image: img,
145
+ width: imgConfig.width || img.width,
146
+ height: imgConfig.height || img.height
147
+ });
148
+ }
149
+ // Calculate canvas dimensions
150
+ let canvasWidth = 0;
151
+ let canvasHeight = 0;
152
+ if (type === 'grid') {
153
+ const cellWidth = Math.max(...loadedImages.map(img => img.width));
154
+ const cellHeight = Math.max(...loadedImages.map(img => img.height));
155
+ canvasWidth = cellWidth * columns + spacing * (columns - 1);
156
+ canvasHeight = cellHeight * rows + spacing * (rows - 1);
157
+ }
158
+ else if (type === 'masonry') {
159
+ // Masonry layout - columns with varying heights
160
+ const colWidths = new Array(columns).fill(0);
161
+ const colHeights = new Array(columns).fill(0);
162
+ for (let i = 0; i < loadedImages.length; i++) {
163
+ const col = i % columns;
164
+ colWidths[col] = Math.max(colWidths[col], loadedImages[i].width);
165
+ colHeights[col] += loadedImages[i].height + (i >= columns ? spacing : 0);
166
+ }
167
+ canvasWidth = Math.max(...colWidths) * columns + spacing * (columns - 1);
168
+ canvasHeight = Math.max(...colHeights);
169
+ }
170
+ else if (type === 'carousel') {
171
+ // Horizontal carousel
172
+ canvasWidth = loadedImages.reduce((sum, img) => sum + img.width, 0) + spacing * (loadedImages.length - 1);
173
+ canvasHeight = Math.max(...loadedImages.map(img => img.height));
174
+ }
175
+ else {
176
+ // Custom - use provided dimensions or calculate
177
+ canvasWidth = 800;
178
+ canvasHeight = 600;
179
+ }
180
+ // Create canvas
181
+ const canvas = (0, canvas_1.createCanvas)(canvasWidth, canvasHeight);
182
+ const ctx = canvas.getContext('2d');
183
+ if (!ctx)
184
+ throw new Error("Unable to get 2D context");
185
+ // Draw background
186
+ ctx.fillStyle = background;
187
+ ctx.fillRect(0, 0, canvasWidth, canvasHeight);
188
+ // Draw images
189
+ let currentX = 0;
190
+ let currentY = 0;
191
+ const colHeights = new Array(columns).fill(0);
192
+ for (let i = 0; i < loadedImages.length; i++) {
193
+ const imgData = loadedImages[i];
194
+ if (type === 'grid') {
195
+ const col = i % columns;
196
+ const row = Math.floor(i / columns);
197
+ const cellWidth = Math.max(...loadedImages.map(img => img.width));
198
+ const cellHeight = Math.max(...loadedImages.map(img => img.height));
199
+ currentX = col * (cellWidth + spacing);
200
+ currentY = row * (cellHeight + spacing);
201
+ }
202
+ else if (type === 'masonry') {
203
+ const col = i % columns;
204
+ currentX = col * (Math.max(...loadedImages.map(img => img.width)) + spacing);
205
+ currentY = colHeights[col];
206
+ colHeights[col] += imgData.height + spacing;
207
+ }
208
+ else if (type === 'carousel') {
209
+ if (i > 0)
210
+ currentX += spacing;
211
+ currentY = (canvasHeight - imgData.height) / 2;
212
+ }
213
+ // Apply border radius if specified
214
+ if (borderRadius > 0) {
215
+ ctx.save();
216
+ ctx.beginPath();
217
+ ctx.roundRect(currentX, currentY, imgData.width, imgData.height, borderRadius);
218
+ ctx.clip();
219
+ }
220
+ ctx.drawImage(imgData.image, currentX, currentY, imgData.width, imgData.height);
221
+ if (borderRadius > 0) {
222
+ ctx.restore();
223
+ }
224
+ }
225
+ return canvas.toBuffer('image/png');
226
+ }
227
+ //# sourceMappingURL=imageStitching.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"imageStitching.js","sourceRoot":"","sources":["../../../../../lib/Canvas/utils/General/imageStitching.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ import { SKRSContext2D } from '@napi-rs/canvas';
2
+ /**
3
+ * Applies vignette effect to the canvas
4
+ * @param ctx - Canvas 2D context
5
+ * @param intensity - Vignette intensity (0-1)
6
+ * @param size - Vignette size (0-1, where 1 = full canvas)
7
+ * @param width - Canvas width
8
+ * @param height - Canvas height
9
+ */
10
+ export declare function applyVignette(ctx: SKRSContext2D, intensity: number, size: number, width: number, height: number): void;
11
+ /**
12
+ * Applies lens flare effect to the canvas
13
+ * @param ctx - Canvas 2D context
14
+ * @param flareX - Flare center X position
15
+ * @param flareY - Flare center Y position
16
+ * @param intensity - Flare intensity (0-1)
17
+ * @param width - Canvas width
18
+ * @param height - Canvas height
19
+ */
20
+ export declare function applyLensFlare(ctx: SKRSContext2D, flareX: number, flareY: number, intensity: number, width: number, height: number): void;
21
+ /**
22
+ * Applies chromatic aberration effect
23
+ * @param ctx - Canvas 2D context
24
+ * @param intensity - Aberration intensity (0-1)
25
+ * @param width - Canvas width
26
+ * @param height - Canvas height
27
+ */
28
+ export declare function applyChromaticAberration(ctx: SKRSContext2D, intensity: number, width: number, height: number): void;
29
+ /**
30
+ * Applies film grain effect
31
+ * @param ctx - Canvas 2D context
32
+ * @param intensity - Grain intensity (0-1)
33
+ * @param width - Canvas width
34
+ * @param height - Canvas height
35
+ */
36
+ export declare function applyFilmGrain(ctx: SKRSContext2D, intensity: number, width: number, height: number): void;
37
+ //# sourceMappingURL=imageEffects.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"imageEffects.d.ts","sourceRoot":"","sources":["../../../../../lib/Canvas/utils/Image/imageEffects.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAS,MAAM,iBAAiB,CAAC;AAEvD;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAC3B,GAAG,EAAE,aAAa,EAClB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GACb,IAAI,CA0BN;AAED;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAC5B,GAAG,EAAE,aAAa,EAClB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GACb,IAAI,CAwCN;AAED;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CACtC,GAAG,EAAE,aAAa,EAClB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GACb,IAAI,CA6BN;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAC5B,GAAG,EAAE,aAAa,EAClB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GACb,IAAI,CAgBN"}
@@ -0,0 +1,128 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.applyVignette = applyVignette;
4
+ exports.applyLensFlare = applyLensFlare;
5
+ exports.applyChromaticAberration = applyChromaticAberration;
6
+ exports.applyFilmGrain = applyFilmGrain;
7
+ /**
8
+ * Applies vignette effect to the canvas
9
+ * @param ctx - Canvas 2D context
10
+ * @param intensity - Vignette intensity (0-1)
11
+ * @param size - Vignette size (0-1, where 1 = full canvas)
12
+ * @param width - Canvas width
13
+ * @param height - Canvas height
14
+ */
15
+ function applyVignette(ctx, intensity, size, width, height) {
16
+ const imageData = ctx.getImageData(0, 0, width, height);
17
+ const pixels = imageData.data;
18
+ const centerX = width / 2;
19
+ const centerY = height / 2;
20
+ const maxDistance = Math.sqrt(centerX * centerX + centerY * centerY);
21
+ const vignetteRadius = maxDistance * size;
22
+ for (let i = 0; i < pixels.length; i += 4) {
23
+ const x = (i / 4) % width;
24
+ const y = Math.floor((i / 4) / width);
25
+ const dx = x - centerX;
26
+ const dy = y - centerY;
27
+ const distance = Math.sqrt(dx * dx + dy * dy);
28
+ if (distance > vignetteRadius) {
29
+ const vignetteAmount = Math.min(1, (distance - vignetteRadius) / (maxDistance - vignetteRadius));
30
+ const darken = 1 - (vignetteAmount * intensity);
31
+ pixels[i] = Math.round(pixels[i] * darken); // R
32
+ pixels[i + 1] = Math.round(pixels[i + 1] * darken); // G
33
+ pixels[i + 2] = Math.round(pixels[i + 2] * darken); // B
34
+ }
35
+ }
36
+ ctx.putImageData(imageData, 0, 0);
37
+ }
38
+ /**
39
+ * Applies lens flare effect to the canvas
40
+ * @param ctx - Canvas 2D context
41
+ * @param flareX - Flare center X position
42
+ * @param flareY - Flare center Y position
43
+ * @param intensity - Flare intensity (0-1)
44
+ * @param width - Canvas width
45
+ * @param height - Canvas height
46
+ */
47
+ function applyLensFlare(ctx, flareX, flareY, intensity, width, height) {
48
+ ctx.save();
49
+ // Create gradient for lens flare
50
+ const gradient = ctx.createRadialGradient(flareX, flareY, 0, flareX, flareY, Math.max(width, height) * 0.5);
51
+ const flareColor = `rgba(255, 255, 255, ${intensity * 0.6})`;
52
+ gradient.addColorStop(0, flareColor);
53
+ gradient.addColorStop(0.3, `rgba(255, 255, 255, ${intensity * 0.3})`);
54
+ gradient.addColorStop(0.6, `rgba(255, 255, 200, ${intensity * 0.1})`);
55
+ gradient.addColorStop(1, 'rgba(255, 255, 255, 0)');
56
+ ctx.globalCompositeOperation = 'screen';
57
+ ctx.fillStyle = gradient;
58
+ ctx.fillRect(0, 0, width, height);
59
+ // Add additional flare elements
60
+ const flareElements = [
61
+ { x: flareX * 0.7, y: flareY * 0.7, size: 30, opacity: intensity * 0.4 },
62
+ { x: flareX * 1.3, y: flareY * 1.1, size: 20, opacity: intensity * 0.3 },
63
+ { x: flareX * 0.9, y: flareY * 1.2, size: 15, opacity: intensity * 0.2 }
64
+ ];
65
+ for (const element of flareElements) {
66
+ if (element.x >= 0 && element.x < width && element.y >= 0 && element.y < height) {
67
+ const elementGradient = ctx.createRadialGradient(element.x, element.y, 0, element.x, element.y, element.size);
68
+ elementGradient.addColorStop(0, `rgba(255, 255, 255, ${element.opacity})`);
69
+ elementGradient.addColorStop(1, 'rgba(255, 255, 255, 0)');
70
+ ctx.fillStyle = elementGradient;
71
+ ctx.fillRect(element.x - element.size, element.y - element.size, element.size * 2, element.size * 2);
72
+ }
73
+ }
74
+ ctx.restore();
75
+ }
76
+ /**
77
+ * Applies chromatic aberration effect
78
+ * @param ctx - Canvas 2D context
79
+ * @param intensity - Aberration intensity (0-1)
80
+ * @param width - Canvas width
81
+ * @param height - Canvas height
82
+ */
83
+ function applyChromaticAberration(ctx, intensity, width, height) {
84
+ const imageData = ctx.getImageData(0, 0, width, height);
85
+ const pixels = imageData.data;
86
+ const newPixels = new Uint8ClampedArray(pixels.length);
87
+ const offset = Math.round(intensity * 5); // Max 5 pixel offset
88
+ for (let y = 0; y < height; y++) {
89
+ for (let x = 0; x < width; x++) {
90
+ const idx = (y * width + x) * 4;
91
+ // Red channel - shift left
92
+ const redX = Math.max(0, Math.min(width - 1, x - offset));
93
+ const redIdx = (y * width + redX) * 4;
94
+ newPixels[idx] = pixels[redIdx];
95
+ // Green channel - no shift
96
+ newPixels[idx + 1] = pixels[idx + 1];
97
+ // Blue channel - shift right
98
+ const blueX = Math.max(0, Math.min(width - 1, x + offset));
99
+ const blueIdx = (y * width + blueX) * 4;
100
+ newPixels[idx + 2] = pixels[blueIdx];
101
+ // Alpha channel - no change
102
+ newPixels[idx + 3] = pixels[idx + 3];
103
+ }
104
+ }
105
+ ctx.putImageData(new ImageData(newPixels, width, height), 0, 0);
106
+ }
107
+ /**
108
+ * Applies film grain effect
109
+ * @param ctx - Canvas 2D context
110
+ * @param intensity - Grain intensity (0-1)
111
+ * @param width - Canvas width
112
+ * @param height - Canvas height
113
+ */
114
+ function applyFilmGrain(ctx, intensity, width, height) {
115
+ const imageData = ctx.getImageData(0, 0, width, height);
116
+ const pixels = imageData.data;
117
+ const grainAmount = intensity * 30; // Max 30 pixel variation
118
+ for (let i = 0; i < pixels.length; i += 4) {
119
+ // Generate random grain
120
+ const grain = (Math.random() - 0.5) * grainAmount;
121
+ pixels[i] = Math.max(0, Math.min(255, pixels[i] + grain)); // R
122
+ pixels[i + 1] = Math.max(0, Math.min(255, pixels[i + 1] + grain)); // G
123
+ pixels[i + 2] = Math.max(0, Math.min(255, pixels[i + 2] + grain)); // B
124
+ // Alpha unchanged
125
+ }
126
+ ctx.putImageData(imageData, 0, 0);
127
+ }
128
+ //# sourceMappingURL=imageEffects.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"imageEffects.js","sourceRoot":"","sources":["../../../../../lib/Canvas/utils/Image/imageEffects.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,67 @@
1
+ import { SKRSContext2D, Image } from '@napi-rs/canvas';
2
+ /**
3
+ * Applies a mask to an image
4
+ * @param ctx - Canvas 2D context
5
+ * @param image - Source image
6
+ * @param maskSource - Mask image source (path, URL, or Buffer)
7
+ * @param mode - Mask mode: 'alpha', 'luminance', or 'inverse'
8
+ * @param x - X position
9
+ * @param y - Y position
10
+ * @param width - Image width
11
+ * @param height - Image height
12
+ */
13
+ export declare function applyImageMask(ctx: SKRSContext2D, image: Image, maskSource: string | Buffer, mode: "alpha" | "luminance" | "inverse" | undefined, x: number, y: number, width: number, height: number): Promise<void>;
14
+ /**
15
+ * Applies a clipping path to the context
16
+ * @param ctx - Canvas 2D context
17
+ * @param clipPath - Array of points defining the polygon
18
+ */
19
+ export declare function applyClipPath(ctx: SKRSContext2D, clipPath: Array<{
20
+ x: number;
21
+ y: number;
22
+ }>): void;
23
+ /**
24
+ * Applies perspective distortion to an image
25
+ * @param ctx - Canvas 2D context
26
+ * @param image - Source image
27
+ * @param points - Four corner points for perspective transform
28
+ * @param x - X position
29
+ * @param y - Y position
30
+ * @param width - Image width
31
+ * @param height - Image height
32
+ */
33
+ export declare function applyPerspectiveDistortion(ctx: SKRSContext2D, image: Image, points: Array<{
34
+ x: number;
35
+ y: number;
36
+ }>, x: number, y: number, width: number, height: number): void;
37
+ /**
38
+ * Applies bulge distortion to an image
39
+ * @param ctx - Canvas 2D context
40
+ * @param image - Source image
41
+ * @param centerX - Center X of bulge
42
+ * @param centerY - Center Y of bulge
43
+ * @param radius - Radius of effect
44
+ * @param intensity - Bulge intensity (-1 to 1, positive = bulge, negative = pinch)
45
+ * @param x - X position
46
+ * @param y - Y position
47
+ * @param width - Image width
48
+ * @param height - Image height
49
+ */
50
+ export declare function applyBulgeDistortion(ctx: SKRSContext2D, image: Image, centerX: number, centerY: number, radius: number, intensity: number, x: number, y: number, width: number, height: number): void;
51
+ /**
52
+ * Applies mesh warp to an image
53
+ * @param ctx - Canvas 2D context
54
+ * @param image - Source image
55
+ * @param gridX - Number of grid divisions X
56
+ * @param gridY - Number of grid divisions Y
57
+ * @param controlPoints - Control point grid [y][x]
58
+ * @param x - X position
59
+ * @param y - Y position
60
+ * @param width - Image width
61
+ * @param height - Image height
62
+ */
63
+ export declare function applyMeshWarp(ctx: SKRSContext2D, image: Image, gridX: number, gridY: number, controlPoints: Array<Array<{
64
+ x: number;
65
+ y: number;
66
+ }>>, x: number, y: number, width: number, height: number): void;
67
+ //# sourceMappingURL=imageMasking.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"imageMasking.d.ts","sourceRoot":"","sources":["../../../../../lib/Canvas/utils/Image/imageMasking.ts"],"names":[],"mappings":"AAAA,OAAO,EAA2B,aAAa,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAIhF;;;;;;;;;;GAUG;AACH,wBAAsB,cAAc,CAClC,GAAG,EAAE,aAAa,EAClB,KAAK,EAAE,KAAK,EACZ,UAAU,EAAE,MAAM,GAAG,MAAM,EAC3B,IAAI,EAAE,OAAO,GAAG,WAAW,GAAG,SAAS,YAAU,EACjD,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,IAAI,CAAC,CA+Df;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,CAAC;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG,IAAI,CAYjG;AAED;;;;;;;;;GASG;AACH,wBAAgB,0BAA0B,CACxC,GAAG,EAAE,aAAa,EAClB,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,KAAK,CAAC;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,EACvC,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GACb,IAAI,CAuBN;AAsCD;;;;;;;;;;;;GAYG;AACH,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,aAAa,EAClB,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GACb,IAAI,CAgDN;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAC3B,GAAG,EAAE,aAAa,EAClB,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,aAAa,EAAE,KAAK,CAAC,KAAK,CAAC;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,EACrD,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GACb,IAAI,CAkDN"}