apexify.js 4.8.3 → 4.8.4

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 (229) hide show
  1. package/dist/cjs/ai/ApexAI.d.ts +145 -0
  2. package/dist/cjs/ai/ApexAI.d.ts.map +1 -0
  3. package/dist/cjs/ai/ApexAI.js +494 -0
  4. package/dist/cjs/ai/ApexAI.js.map +1 -0
  5. package/dist/cjs/ai/ApexModules.d.ts +53 -0
  6. package/dist/cjs/ai/ApexModules.d.ts.map +1 -0
  7. package/dist/cjs/ai/ApexModules.js +819 -0
  8. package/dist/cjs/ai/ApexModules.js.map +1 -0
  9. package/dist/cjs/ai/functions/readFiles.d.ts +2 -0
  10. package/dist/cjs/ai/functions/readFiles.d.ts.map +1 -0
  11. package/dist/cjs/ai/functions/readFiles.js +96 -0
  12. package/dist/cjs/ai/functions/readFiles.js.map +1 -0
  13. package/dist/cjs/ai/functions/tokenizer.d.ts +10 -0
  14. package/dist/cjs/ai/functions/tokenizer.d.ts.map +1 -0
  15. package/dist/cjs/ai/functions/tokenizer.js +64 -0
  16. package/dist/cjs/ai/functions/tokenizer.js.map +1 -0
  17. package/dist/cjs/ai/functions/validOptions.d.ts +22 -0
  18. package/dist/cjs/ai/functions/validOptions.d.ts.map +1 -0
  19. package/dist/cjs/ai/functions/validOptions.js +103 -0
  20. package/dist/cjs/ai/functions/validOptions.js.map +1 -0
  21. package/dist/cjs/ai/modals/electronHub/chatmodels.d.ts +7 -0
  22. package/dist/cjs/ai/modals/electronHub/chatmodels.d.ts.map +1 -0
  23. package/dist/cjs/ai/modals/electronHub/chatmodels.js +51 -0
  24. package/dist/cjs/ai/modals/electronHub/chatmodels.js.map +1 -0
  25. package/dist/cjs/ai/modals/electronHub/imageModels.d.ts +12 -0
  26. package/dist/cjs/ai/modals/electronHub/imageModels.d.ts.map +1 -0
  27. package/dist/cjs/ai/modals/electronHub/imageModels.js +92 -0
  28. package/dist/cjs/ai/modals/electronHub/imageModels.js.map +1 -0
  29. package/dist/cjs/ai/modals/electronHub/speechModels.d.ts +7 -0
  30. package/dist/cjs/ai/modals/electronHub/speechModels.d.ts.map +1 -0
  31. package/dist/cjs/ai/modals/electronHub/speechModels.js +63 -0
  32. package/dist/cjs/ai/modals/electronHub/speechModels.js.map +1 -0
  33. package/dist/cjs/ai/modals/electronHub/videoModels.d.ts +6 -0
  34. package/dist/cjs/ai/modals/electronHub/videoModels.d.ts.map +1 -0
  35. package/dist/cjs/ai/modals/electronHub/videoModels.js +63 -0
  36. package/dist/cjs/ai/modals/electronHub/videoModels.js.map +1 -0
  37. package/dist/cjs/ai/modals/groq/chatgroq.d.ts +9 -0
  38. package/dist/cjs/ai/modals/groq/chatgroq.d.ts.map +1 -0
  39. package/dist/cjs/ai/modals/groq/chatgroq.js +64 -0
  40. package/dist/cjs/ai/modals/groq/chatgroq.js.map +1 -0
  41. package/dist/cjs/ai/modals/groq/imageAnalyzer.d.ts +8 -0
  42. package/dist/cjs/ai/modals/groq/imageAnalyzer.d.ts.map +1 -0
  43. package/dist/cjs/ai/modals/groq/imageAnalyzer.js +82 -0
  44. package/dist/cjs/ai/modals/groq/imageAnalyzer.js.map +1 -0
  45. package/dist/cjs/ai/modals/groq/whisper.d.ts +5 -0
  46. package/dist/cjs/ai/modals/groq/whisper.d.ts.map +1 -0
  47. package/dist/cjs/ai/modals/groq/whisper.js +108 -0
  48. package/dist/cjs/ai/modals/groq/whisper.js.map +1 -0
  49. package/dist/cjs/ai/modals/hercai/chatModels.d.ts +7 -0
  50. package/dist/cjs/ai/modals/hercai/chatModels.d.ts.map +1 -0
  51. package/dist/cjs/ai/modals/hercai/chatModels.js +23 -0
  52. package/dist/cjs/ai/modals/hercai/chatModels.js.map +1 -0
  53. package/dist/cjs/ai/utils.d.ts +5 -0
  54. package/dist/cjs/ai/utils.d.ts.map +1 -0
  55. package/dist/cjs/ai/utils.js +15 -0
  56. package/dist/cjs/ai/utils.js.map +1 -0
  57. package/dist/cjs/canvas/ApexPainter.d.ts +145 -0
  58. package/dist/cjs/canvas/ApexPainter.d.ts.map +1 -0
  59. package/dist/cjs/canvas/ApexPainter.js +908 -0
  60. package/dist/cjs/canvas/ApexPainter.js.map +1 -0
  61. package/dist/cjs/canvas/utils/Background/bg.d.ts +31 -0
  62. package/dist/cjs/canvas/utils/Background/bg.d.ts.map +1 -0
  63. package/dist/cjs/canvas/utils/Background/bg.js +161 -0
  64. package/dist/cjs/canvas/utils/Background/bg.js.map +1 -0
  65. package/dist/cjs/canvas/utils/Charts/charts.d.ts +8 -0
  66. package/dist/cjs/canvas/utils/Charts/charts.d.ts.map +1 -0
  67. package/dist/cjs/canvas/utils/Charts/charts.js +464 -0
  68. package/dist/cjs/canvas/utils/Charts/charts.js.map +1 -0
  69. package/dist/cjs/canvas/utils/Custom/customLines.d.ts +3 -0
  70. package/dist/cjs/canvas/utils/Custom/customLines.d.ts.map +1 -0
  71. package/dist/cjs/canvas/utils/Custom/customLines.js +109 -0
  72. package/dist/cjs/canvas/utils/Custom/customLines.js.map +1 -0
  73. package/dist/cjs/canvas/utils/General/conversion.d.ts +6 -0
  74. package/dist/cjs/canvas/utils/General/conversion.d.ts.map +1 -0
  75. package/dist/cjs/canvas/utils/General/conversion.js +34 -0
  76. package/dist/cjs/canvas/utils/General/conversion.js.map +1 -0
  77. package/dist/cjs/canvas/utils/General/general functions.d.ts +39 -0
  78. package/dist/cjs/canvas/utils/General/general functions.d.ts.map +1 -0
  79. package/dist/cjs/canvas/utils/General/general functions.js +606 -0
  80. package/dist/cjs/canvas/utils/General/general functions.js.map +1 -0
  81. package/dist/cjs/canvas/utils/Image/imageProperties.d.ts +115 -0
  82. package/dist/cjs/canvas/utils/Image/imageProperties.d.ts.map +1 -0
  83. package/dist/cjs/canvas/utils/Image/imageProperties.js +602 -0
  84. package/dist/cjs/canvas/utils/Image/imageProperties.js.map +1 -0
  85. package/dist/cjs/canvas/utils/Texts/textProperties.d.ts +17 -0
  86. package/dist/cjs/canvas/utils/Texts/textProperties.d.ts.map +1 -0
  87. package/dist/cjs/canvas/utils/Texts/textProperties.js +160 -0
  88. package/dist/cjs/canvas/utils/Texts/textProperties.js.map +1 -0
  89. package/dist/cjs/canvas/utils/types.d.ts +622 -0
  90. package/dist/cjs/canvas/utils/types.d.ts.map +1 -0
  91. package/dist/cjs/canvas/utils/types.js +7 -0
  92. package/dist/cjs/canvas/utils/types.js.map +1 -0
  93. package/dist/cjs/canvas/utils/utils.d.ts +19 -0
  94. package/dist/cjs/canvas/utils/utils.d.ts.map +1 -0
  95. package/dist/cjs/canvas/utils/utils.js +53 -0
  96. package/dist/cjs/canvas/utils/utils.js.map +1 -0
  97. package/dist/cjs/index.d.ts +29 -0
  98. package/dist/cjs/index.d.ts.map +1 -0
  99. package/dist/cjs/index.js +117 -0
  100. package/dist/cjs/index.js.map +1 -0
  101. package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -0
  102. package/dist/cjs/utils.d.ts +5 -0
  103. package/dist/cjs/utils.d.ts.map +1 -0
  104. package/dist/cjs/utils.js +16 -0
  105. package/dist/cjs/utils.js.map +1 -0
  106. package/dist/esm/ai/ApexAI.d.ts +145 -0
  107. package/dist/esm/ai/ApexAI.d.ts.map +1 -0
  108. package/dist/esm/ai/ApexAI.js +494 -0
  109. package/dist/esm/ai/ApexAI.js.map +1 -0
  110. package/dist/esm/ai/ApexModules.d.ts +53 -0
  111. package/dist/esm/ai/ApexModules.d.ts.map +1 -0
  112. package/dist/esm/ai/ApexModules.js +819 -0
  113. package/dist/esm/ai/ApexModules.js.map +1 -0
  114. package/dist/esm/ai/functions/readFiles.d.ts +2 -0
  115. package/dist/esm/ai/functions/readFiles.d.ts.map +1 -0
  116. package/dist/esm/ai/functions/readFiles.js +96 -0
  117. package/dist/esm/ai/functions/readFiles.js.map +1 -0
  118. package/dist/esm/ai/functions/tokenizer.d.ts +10 -0
  119. package/dist/esm/ai/functions/tokenizer.d.ts.map +1 -0
  120. package/dist/esm/ai/functions/tokenizer.js +64 -0
  121. package/dist/esm/ai/functions/tokenizer.js.map +1 -0
  122. package/dist/esm/ai/functions/validOptions.d.ts +22 -0
  123. package/dist/esm/ai/functions/validOptions.d.ts.map +1 -0
  124. package/dist/esm/ai/functions/validOptions.js +103 -0
  125. package/dist/esm/ai/functions/validOptions.js.map +1 -0
  126. package/dist/esm/ai/modals/electronHub/chatmodels.d.ts +7 -0
  127. package/dist/esm/ai/modals/electronHub/chatmodels.d.ts.map +1 -0
  128. package/dist/esm/ai/modals/electronHub/chatmodels.js +51 -0
  129. package/dist/esm/ai/modals/electronHub/chatmodels.js.map +1 -0
  130. package/dist/esm/ai/modals/electronHub/imageModels.d.ts +12 -0
  131. package/dist/esm/ai/modals/electronHub/imageModels.d.ts.map +1 -0
  132. package/dist/esm/ai/modals/electronHub/imageModels.js +92 -0
  133. package/dist/esm/ai/modals/electronHub/imageModels.js.map +1 -0
  134. package/dist/esm/ai/modals/electronHub/speechModels.d.ts +7 -0
  135. package/dist/esm/ai/modals/electronHub/speechModels.d.ts.map +1 -0
  136. package/dist/esm/ai/modals/electronHub/speechModels.js +63 -0
  137. package/dist/esm/ai/modals/electronHub/speechModels.js.map +1 -0
  138. package/dist/esm/ai/modals/electronHub/videoModels.d.ts +6 -0
  139. package/dist/esm/ai/modals/electronHub/videoModels.d.ts.map +1 -0
  140. package/dist/esm/ai/modals/electronHub/videoModels.js +63 -0
  141. package/dist/esm/ai/modals/electronHub/videoModels.js.map +1 -0
  142. package/dist/esm/ai/modals/groq/chatgroq.d.ts +9 -0
  143. package/dist/esm/ai/modals/groq/chatgroq.d.ts.map +1 -0
  144. package/dist/esm/ai/modals/groq/chatgroq.js +64 -0
  145. package/dist/esm/ai/modals/groq/chatgroq.js.map +1 -0
  146. package/dist/esm/ai/modals/groq/imageAnalyzer.d.ts +8 -0
  147. package/dist/esm/ai/modals/groq/imageAnalyzer.d.ts.map +1 -0
  148. package/dist/esm/ai/modals/groq/imageAnalyzer.js +82 -0
  149. package/dist/esm/ai/modals/groq/imageAnalyzer.js.map +1 -0
  150. package/dist/esm/ai/modals/groq/whisper.d.ts +5 -0
  151. package/dist/esm/ai/modals/groq/whisper.d.ts.map +1 -0
  152. package/dist/esm/ai/modals/groq/whisper.js +108 -0
  153. package/dist/esm/ai/modals/groq/whisper.js.map +1 -0
  154. package/dist/esm/ai/modals/hercai/chatModels.d.ts +7 -0
  155. package/dist/esm/ai/modals/hercai/chatModels.d.ts.map +1 -0
  156. package/dist/esm/ai/modals/hercai/chatModels.js +23 -0
  157. package/dist/esm/ai/modals/hercai/chatModels.js.map +1 -0
  158. package/dist/esm/ai/utils.d.ts +5 -0
  159. package/dist/esm/ai/utils.d.ts.map +1 -0
  160. package/dist/esm/ai/utils.js +15 -0
  161. package/dist/esm/ai/utils.js.map +1 -0
  162. package/dist/esm/canvas/ApexPainter.d.ts +145 -0
  163. package/dist/esm/canvas/ApexPainter.d.ts.map +1 -0
  164. package/dist/esm/canvas/ApexPainter.js +908 -0
  165. package/dist/esm/canvas/ApexPainter.js.map +1 -0
  166. package/dist/esm/canvas/utils/Background/bg.d.ts +31 -0
  167. package/dist/esm/canvas/utils/Background/bg.d.ts.map +1 -0
  168. package/dist/esm/canvas/utils/Background/bg.js +161 -0
  169. package/dist/esm/canvas/utils/Background/bg.js.map +1 -0
  170. package/dist/esm/canvas/utils/Charts/charts.d.ts +8 -0
  171. package/dist/esm/canvas/utils/Charts/charts.d.ts.map +1 -0
  172. package/dist/esm/canvas/utils/Charts/charts.js +464 -0
  173. package/dist/esm/canvas/utils/Charts/charts.js.map +1 -0
  174. package/dist/esm/canvas/utils/Custom/customLines.d.ts +3 -0
  175. package/dist/esm/canvas/utils/Custom/customLines.d.ts.map +1 -0
  176. package/dist/esm/canvas/utils/Custom/customLines.js +109 -0
  177. package/dist/esm/canvas/utils/Custom/customLines.js.map +1 -0
  178. package/dist/esm/canvas/utils/General/conversion.d.ts +6 -0
  179. package/dist/esm/canvas/utils/General/conversion.d.ts.map +1 -0
  180. package/dist/esm/canvas/utils/General/conversion.js +34 -0
  181. package/dist/esm/canvas/utils/General/conversion.js.map +1 -0
  182. package/dist/esm/canvas/utils/General/general functions.d.ts +39 -0
  183. package/dist/esm/canvas/utils/General/general functions.d.ts.map +1 -0
  184. package/dist/esm/canvas/utils/General/general functions.js +606 -0
  185. package/dist/esm/canvas/utils/General/general functions.js.map +1 -0
  186. package/dist/esm/canvas/utils/Image/imageProperties.d.ts +115 -0
  187. package/dist/esm/canvas/utils/Image/imageProperties.d.ts.map +1 -0
  188. package/dist/esm/canvas/utils/Image/imageProperties.js +602 -0
  189. package/dist/esm/canvas/utils/Image/imageProperties.js.map +1 -0
  190. package/dist/esm/canvas/utils/Texts/textProperties.d.ts +17 -0
  191. package/dist/esm/canvas/utils/Texts/textProperties.d.ts.map +1 -0
  192. package/dist/esm/canvas/utils/Texts/textProperties.js +160 -0
  193. package/dist/esm/canvas/utils/Texts/textProperties.js.map +1 -0
  194. package/dist/esm/canvas/utils/types.d.ts +622 -0
  195. package/dist/esm/canvas/utils/types.d.ts.map +1 -0
  196. package/dist/esm/canvas/utils/types.js +7 -0
  197. package/dist/esm/canvas/utils/types.js.map +1 -0
  198. package/dist/esm/canvas/utils/utils.d.ts +19 -0
  199. package/dist/esm/canvas/utils/utils.d.ts.map +1 -0
  200. package/dist/esm/canvas/utils/utils.js +53 -0
  201. package/dist/esm/canvas/utils/utils.js.map +1 -0
  202. package/dist/esm/index.d.ts +29 -0
  203. package/dist/esm/index.d.ts.map +1 -0
  204. package/dist/esm/index.js +117 -0
  205. package/dist/esm/index.js.map +1 -0
  206. package/dist/esm/tsconfig.esm.tsbuildinfo +1 -0
  207. package/dist/esm/utils.d.ts +5 -0
  208. package/dist/esm/utils.d.ts.map +1 -0
  209. package/dist/esm/utils.js +16 -0
  210. package/dist/esm/utils.js.map +1 -0
  211. package/lib/ai/ApexAI.ts +2 -2
  212. package/lib/ai/ApexModules.ts +8 -8
  213. package/lib/ai/modals/electronHub/chatmodels.ts +1 -1
  214. package/lib/ai/modals/electronHub/imageModels.ts +2 -2
  215. package/lib/ai/modals/electronHub/speechModels.ts +1 -1
  216. package/lib/ai/utils.ts +3 -3
  217. package/lib/canvas/ApexPainter.ts +1 -1
  218. package/lib/canvas/utils/Background/bg.ts +1 -1
  219. package/lib/canvas/utils/Charts/charts.ts +1 -1
  220. package/lib/canvas/utils/Custom/customLines.ts +2 -2
  221. package/lib/canvas/utils/General/general functions.ts +1 -1
  222. package/lib/canvas/utils/Image/imageProperties.ts +1 -1
  223. package/lib/canvas/utils/Texts/textProperties.ts +1 -1
  224. package/lib/canvas/utils/utils.ts +8 -8
  225. package/lib/index.ts +5 -5
  226. package/lib/utils.ts +3 -3
  227. package/package.json +4 -6
  228. package/dist/tsconfig.cjs.tsbuildinfo +0 -1
  229. package/dist/tsconfig.esm.tsbuildinfo +0 -1
@@ -0,0 +1,606 @@
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.loadImages = loadImages;
7
+ exports.resizingImg = resizingImg;
8
+ exports.converter = converter;
9
+ exports.applyColorFilters = applyColorFilters;
10
+ exports.imgEffects = imgEffects;
11
+ exports.cropInner = cropInner;
12
+ exports.cropOuter = cropOuter;
13
+ exports.detectColors = detectColors;
14
+ exports.removeColor = removeColor;
15
+ exports.bgRemoval = bgRemoval;
16
+ const path_1 = __importDefault(require("path"));
17
+ const sharp_1 = __importDefault(require("sharp"));
18
+ const canvas_1 = require("@napi-rs/canvas");
19
+ const fs_1 = __importDefault(require("fs"));
20
+ const axios_1 = __importDefault(require("axios"));
21
+ async function loadImages(imagePath) {
22
+ try {
23
+ if (!imagePath) {
24
+ throw new Error("Image path is required.");
25
+ }
26
+ if (imagePath.startsWith("http")) {
27
+ const response = await fetch(imagePath);
28
+ if (!response.ok) {
29
+ throw new Error("Failed to fetch image.");
30
+ }
31
+ const buffer = await response.arrayBuffer();
32
+ return (0, sharp_1.default)(buffer);
33
+ }
34
+ else {
35
+ const absolutePath = path_1.default.join(process.cwd(), imagePath);
36
+ return (0, sharp_1.default)(absolutePath);
37
+ }
38
+ }
39
+ catch (error) {
40
+ console.error("Error loading image:", error);
41
+ throw new Error("Failed to load image");
42
+ }
43
+ }
44
+ /**
45
+ * Resizes an image using Sharp with additional options for quality, kernel, and withoutEnlargement.
46
+ * @param resizeOptions - The options for resizing.
47
+ * @returns A Promise that resolves with the resized image as a Buffer.
48
+ */
49
+ async function resizingImg(resizeOptions) {
50
+ try {
51
+ if (!resizeOptions.imagePath) {
52
+ throw new Error("Image path is required for resizing.");
53
+ }
54
+ // ✅ Use `loadImages()` instead of handling the fetch manually
55
+ const image = await loadImages(resizeOptions.imagePath);
56
+ const resizeOptionsForSharp = {
57
+ width: resizeOptions.size?.width || 500,
58
+ height: resizeOptions.size?.height || 500,
59
+ fit: resizeOptions.maintainAspectRatio ? sharp_1.default.fit.inside : sharp_1.default.fit.fill,
60
+ kernel: sharp_1.default.kernel.lanczos3,
61
+ withoutEnlargement: true,
62
+ };
63
+ const quality = resizeOptions.quality ?? 90;
64
+ const resizedBuffer = await image
65
+ .resize(resizeOptionsForSharp)
66
+ .png({ quality })
67
+ .toBuffer();
68
+ return resizedBuffer;
69
+ }
70
+ catch (error) {
71
+ console.error("Error resizing image:", error);
72
+ throw new Error("Failed to resize image");
73
+ }
74
+ }
75
+ async function converter(imagePath, newExtension) {
76
+ try {
77
+ const validExtensions = ['jpeg', 'png', 'webp', 'tiff', 'gif', 'avif', 'heif', 'raw', 'pdf', 'svg'];
78
+ const newExt = newExtension.toLowerCase();
79
+ if (!validExtensions.includes(newExt)) {
80
+ throw new Error(`Invalid image format: ${newExt}`);
81
+ }
82
+ let image;
83
+ if (imagePath.startsWith("http")) {
84
+ const response = await fetch(imagePath);
85
+ if (!response.ok) {
86
+ throw new Error("Failed to fetch image.");
87
+ }
88
+ const buffer = await response.arrayBuffer();
89
+ image = (0, sharp_1.default)(Buffer.from(buffer));
90
+ }
91
+ else {
92
+ if (!imagePath) {
93
+ throw new Error("Image path is required.");
94
+ }
95
+ const absolutePath = path_1.default.join(process.cwd(), imagePath);
96
+ image = (0, sharp_1.default)(absolutePath);
97
+ }
98
+ const convertedBuffer = await image.toFormat(newExt).toBuffer();
99
+ return convertedBuffer;
100
+ }
101
+ catch (error) {
102
+ console.error("Error changing image extension:", error);
103
+ throw new Error("Failed to change image extension");
104
+ }
105
+ }
106
+ async function applyColorFilters(imagePath, gradientOptions, opacity = 1) {
107
+ try {
108
+ let image;
109
+ if (imagePath.startsWith("http")) {
110
+ const pngBuffer = await converter(imagePath, "png");
111
+ image = (0, sharp_1.default)(pngBuffer);
112
+ }
113
+ else {
114
+ const imagePathResolved = path_1.default.join(process.cwd(), imagePath);
115
+ image = await (0, sharp_1.default)(imagePathResolved);
116
+ }
117
+ const metadata = await image.metadata();
118
+ let gradientImage;
119
+ if (typeof gradientOptions === 'string') {
120
+ gradientImage = createSolidColorImage(metadata.width, metadata.height, gradientOptions, opacity);
121
+ }
122
+ else {
123
+ gradientImage = createGradientImage(metadata.width, metadata.height, gradientOptions, opacity);
124
+ }
125
+ const outputBuffer = await image
126
+ .composite([{ input: gradientImage, blend: 'over' }])
127
+ .toBuffer();
128
+ return outputBuffer;
129
+ }
130
+ catch (error) {
131
+ console.error("Error applying color filter:", error);
132
+ throw new Error("Failed to apply color filter");
133
+ }
134
+ }
135
+ function createSolidColorImage(width, height, color, opacity) {
136
+ const solidColorCanvas = (0, canvas_1.createCanvas)(width, height);
137
+ const ctx = solidColorCanvas.getContext('2d');
138
+ ctx.globalAlpha = opacity;
139
+ ctx.fillStyle = color;
140
+ ctx.fillRect(0, 0, width, height);
141
+ return solidColorCanvas.toBuffer('image/png');
142
+ }
143
+ function createGradientImage(width, height, options, opacity) {
144
+ const { type, colors } = options;
145
+ const gradientCanvas = (0, canvas_1.createCanvas)(width, height);
146
+ const ctx = gradientCanvas.getContext('2d');
147
+ if (type === 'linear') {
148
+ const gradient = ctx.createLinearGradient(options.startX || 0, options.startY || 0, options.endX || width, options.endY || height);
149
+ colors.forEach(({ stop, color }) => {
150
+ gradient.addColorStop(stop, color);
151
+ });
152
+ ctx.fillStyle = gradient;
153
+ }
154
+ else if (type === 'radial') {
155
+ const gradient = ctx.createRadialGradient(options.startX || width / 2, options.startY || height / 2, options.startRadius || 0, options.endX || width / 2, options.endY || height / 2, options.endRadius || Math.max(width, height));
156
+ colors.forEach(({ stop, color }) => {
157
+ gradient.addColorStop(stop, color);
158
+ });
159
+ ctx.fillStyle = gradient;
160
+ }
161
+ ctx.globalAlpha = opacity;
162
+ ctx.fillRect(0, 0, width, height);
163
+ return gradientCanvas.toBuffer('image/png');
164
+ }
165
+ async function imgEffects(imagePath, filters) {
166
+ try {
167
+ let image;
168
+ if (imagePath.startsWith("http")) {
169
+ const response = await axios_1.default.get(imagePath, { responseType: "arraybuffer" });
170
+ image = await (0, canvas_1.loadImage)(response.data);
171
+ }
172
+ else {
173
+ const imagePathResolved = path_1.default.resolve(process.cwd(), imagePath);
174
+ image = await (0, canvas_1.loadImage)(fs_1.default.readFileSync(imagePathResolved));
175
+ }
176
+ const canvas = (0, canvas_1.createCanvas)(image.width, image.height);
177
+ const ctx = canvas.getContext("2d");
178
+ ctx.drawImage(image, 0, 0);
179
+ for (const filter of filters) {
180
+ switch (filter.type) {
181
+ case "flip":
182
+ flipCanvas(ctx, image.width, image.height, filter.horizontal, filter.vertical);
183
+ break;
184
+ case "rotate":
185
+ rotateCanvas(ctx, canvas, filter.deg);
186
+ break;
187
+ case "brightness":
188
+ adjustBrightness(ctx, filter.value);
189
+ break;
190
+ case "contrast":
191
+ adjustContrast(ctx, filter.value);
192
+ break;
193
+ case "invert":
194
+ invertColors(ctx);
195
+ break;
196
+ case "greyscale":
197
+ grayscale(ctx);
198
+ break;
199
+ case "sepia":
200
+ applySepia(ctx);
201
+ break;
202
+ case "blur":
203
+ applyBlur(ctx, filter.radius);
204
+ break;
205
+ case "posterize":
206
+ posterize(ctx, filter.levels);
207
+ break;
208
+ case "pixelate":
209
+ pixelate(ctx, filter.size, filter.x, filter.y, filter.w, filter.h);
210
+ break;
211
+ default:
212
+ console.error(`Unsupported filter type: ${filter.type}`);
213
+ }
214
+ }
215
+ return canvas.toBuffer("image/png");
216
+ }
217
+ catch (error) {
218
+ console.error("Error processing image:", error.message);
219
+ throw new Error("Failed to process image");
220
+ }
221
+ }
222
+ /**
223
+ * Crops the inner portion of the image based on the bounding box of the provided coordinates.
224
+ * Optionally applies a clipping mask with a specified radius.
225
+ */
226
+ async function cropInner(options) {
227
+ try {
228
+ // Load the image (from HTTP or local path)
229
+ let image;
230
+ if (options.imageSource.startsWith("http")) {
231
+ image = await (0, canvas_1.loadImage)(options.imageSource);
232
+ }
233
+ else {
234
+ image = await (0, canvas_1.loadImage)(path_1.default.join(process.cwd(), options.imageSource));
235
+ }
236
+ // Compute the bounding box from all coordinate points.
237
+ const xs = [];
238
+ const ys = [];
239
+ for (const coord of options.coordinates) {
240
+ xs.push(coord.from.x, coord.to.x);
241
+ ys.push(coord.from.y, coord.to.y);
242
+ }
243
+ const minX = Math.min(...xs);
244
+ const maxX = Math.max(...xs);
245
+ const minY = Math.min(...ys);
246
+ const maxY = Math.max(...ys);
247
+ const cropWidth = maxX - minX;
248
+ const cropHeight = maxY - minY;
249
+ // Create a canvas with the crop dimensions.
250
+ const canvas = (0, canvas_1.createCanvas)(cropWidth, cropHeight);
251
+ const ctx = canvas.getContext('2d');
252
+ if (!ctx)
253
+ throw new Error("Unable to get 2D context");
254
+ // Optionally, apply a clipping mask if a radius is provided.
255
+ if (options.radius !== undefined && options.radius !== null) {
256
+ if (options.radius === "circular") {
257
+ const radius = Math.min(cropWidth, cropHeight) / 2;
258
+ ctx.beginPath();
259
+ ctx.arc(cropWidth / 2, cropHeight / 2, radius, 0, Math.PI * 2);
260
+ ctx.closePath();
261
+ ctx.clip();
262
+ }
263
+ else if (typeof options.radius === 'number' && options.radius >= 0) {
264
+ ctx.beginPath();
265
+ ctx.moveTo(options.radius, 0);
266
+ ctx.lineTo(cropWidth - options.radius, 0);
267
+ ctx.quadraticCurveTo(cropWidth, 0, cropWidth, options.radius);
268
+ ctx.lineTo(cropWidth, cropHeight - options.radius);
269
+ ctx.quadraticCurveTo(cropWidth, cropHeight, cropWidth - options.radius, cropHeight);
270
+ ctx.lineTo(options.radius, cropHeight);
271
+ ctx.quadraticCurveTo(0, cropHeight, 0, cropHeight - options.radius);
272
+ ctx.lineTo(0, options.radius);
273
+ ctx.quadraticCurveTo(0, 0, options.radius, 0);
274
+ ctx.closePath();
275
+ ctx.clip();
276
+ }
277
+ else {
278
+ throw new Error('The "radius" option can only be "circular" or a non-negative number.');
279
+ }
280
+ }
281
+ // Draw the region from the original image corresponding to the bounding box.
282
+ // drawImage(image, sx, sy, sWidth, sHeight, dx, dy, dWidth, dHeight)
283
+ ctx.drawImage(image, minX, minY, cropWidth, cropHeight, 0, 0, cropWidth, cropHeight);
284
+ return canvas.toBuffer('image/png');
285
+ }
286
+ catch (error) {
287
+ console.error('An error occurred in cropInner:', error);
288
+ throw error;
289
+ }
290
+ }
291
+ /**
292
+ * Crops the outer portion of the image by removing the area defined by the provided polygon.
293
+ * The polygon is defined by the coordinates (with optional bezier smoothing using tension).
294
+ */
295
+ async function cropOuter(options) {
296
+ try {
297
+ let image;
298
+ if (options.imageSource.startsWith("http")) {
299
+ image = await (0, canvas_1.loadImage)(options.imageSource);
300
+ }
301
+ else {
302
+ image = await (0, canvas_1.loadImage)(path_1.default.join(process.cwd(), options.imageSource));
303
+ }
304
+ // Create a canvas matching the full image dimensions.
305
+ const canvas = (0, canvas_1.createCanvas)(image.width, image.height);
306
+ const ctx = canvas.getContext('2d');
307
+ if (!ctx)
308
+ throw new Error("Unable to get 2D context");
309
+ // Draw the full image.
310
+ ctx.drawImage(image, 0, 0);
311
+ // Build the polygon path from the provided coordinates.
312
+ ctx.beginPath();
313
+ // Start at the first coordinate's "from" point.
314
+ ctx.moveTo(options.coordinates[0].from.x, options.coordinates[0].from.y);
315
+ for (let i = 0; i < options.coordinates.length; i++) {
316
+ const coord = options.coordinates[i];
317
+ const nextCoord = options.coordinates[(i + 1) % options.coordinates.length];
318
+ const tension = coord.tension || 0;
319
+ const cp1x = coord.from.x + (nextCoord.from.x - coord.from.x) * tension;
320
+ const cp1y = coord.from.y + (nextCoord.from.y - coord.from.y) * tension;
321
+ const cp2x = coord.to.x - (nextCoord.to.x - coord.to.x) * tension;
322
+ const cp2y = coord.to.y - (nextCoord.to.y - coord.to.y) * tension;
323
+ ctx.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, coord.to.x, coord.to.y);
324
+ }
325
+ ctx.closePath();
326
+ // Set the clipping region to the polygon.
327
+ ctx.clip();
328
+ // Clear the inner region defined by the clipping path.
329
+ ctx.clearRect(0, 0, canvas.width, canvas.height);
330
+ return canvas.toBuffer('image/png');
331
+ }
332
+ catch (error) {
333
+ console.error('An error occurred in cropOuter:', error);
334
+ throw error;
335
+ }
336
+ }
337
+ /**
338
+ * Detects dominant colors from an image.
339
+ *
340
+ * @param imagePath - Local path or URL of the image.
341
+ * @returns A sorted array of dominant colors with their frequency.
342
+ */
343
+ async function detectColors(imagePath) {
344
+ try {
345
+ let image;
346
+ if (imagePath.startsWith('http')) {
347
+ const response = await fetch(imagePath);
348
+ if (!response.ok)
349
+ throw new Error(`Failed to fetch image: ${response.statusText}`);
350
+ const buffer = await response.arrayBuffer();
351
+ image = await (0, canvas_1.loadImage)(Buffer.from(buffer));
352
+ }
353
+ else {
354
+ const localImagePath = path_1.default.resolve(imagePath);
355
+ image = await (0, canvas_1.loadImage)(localImagePath);
356
+ }
357
+ const canvas = (0, canvas_1.createCanvas)(image.width, image.height);
358
+ const ctx = canvas.getContext('2d');
359
+ ctx.drawImage(image, 0, 0, image.width, image.height);
360
+ const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
361
+ const data = imageData.data;
362
+ const colorFrequency = {};
363
+ for (let i = 0; i < data.length; i += 4) {
364
+ const [r, g, b, a] = [data[i], data[i + 1], data[i + 2], data[i + 3]];
365
+ if (a < 50)
366
+ continue;
367
+ const color = `${r},${g},${b}`;
368
+ colorFrequency[color] = (colorFrequency[color] || 0) + 1;
369
+ }
370
+ const totalPixels = canvas.width * canvas.height;
371
+ const dominantColors = Object.entries(colorFrequency)
372
+ .map(([color, frequency]) => ({
373
+ color,
374
+ frequency: ((frequency / totalPixels) * 100).toFixed(2),
375
+ }))
376
+ .filter(colorObj => parseFloat(colorObj.frequency) >= 0.1)
377
+ .sort((a, b) => parseFloat(b.frequency) - parseFloat(a.frequency));
378
+ return dominantColors;
379
+ }
380
+ catch (error) {
381
+ console.error("❌ Error detecting colors:", error);
382
+ return [];
383
+ }
384
+ }
385
+ async function removeColor(inputImagePath, colorToRemove) {
386
+ try {
387
+ let image;
388
+ if (inputImagePath.startsWith('http')) {
389
+ const response = await fetch(inputImagePath);
390
+ if (!response.ok) {
391
+ throw new Error("Failed to fetch image.");
392
+ }
393
+ const buffer = await response.arrayBuffer();
394
+ image = await (0, canvas_1.loadImage)(Buffer.from(buffer));
395
+ }
396
+ else {
397
+ const localImagePath = path_1.default.join(process.cwd(), inputImagePath);
398
+ image = await (0, canvas_1.loadImage)(localImagePath);
399
+ }
400
+ const canvas = (0, canvas_1.createCanvas)(image.width, image.height);
401
+ const ctx = canvas.getContext('2d');
402
+ ctx.drawImage(image, 0, 0, image.width, image.height);
403
+ const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
404
+ for (let i = 0; i < imageData.data.length; i += 4) {
405
+ const red = imageData.data[i];
406
+ const green = imageData.data[i + 1];
407
+ const blue = imageData.data[i + 2];
408
+ const alpha = imageData.data[i + 3];
409
+ if (red === colorToRemove.red && green === colorToRemove.green && blue === colorToRemove.blue) {
410
+ imageData.data[i + 3] = 0;
411
+ }
412
+ }
413
+ ctx.putImageData(imageData, 0, 0);
414
+ return canvas.toBuffer('image/png');
415
+ }
416
+ catch (error) {
417
+ console.error('Error:', error);
418
+ return undefined;
419
+ }
420
+ }
421
+ async function bgRemoval(imgURL, API_KEY) {
422
+ try {
423
+ if (!API_KEY) {
424
+ throw new Error("API_KEY is required. Please visit remove.bg, create an account, and obtain your API key at: https://accounts.kaleido.ai/users/sign_in#api-key");
425
+ }
426
+ const response = await fetch('https://api.remove.bg/v1.0/removebg', {
427
+ method: 'POST',
428
+ headers: {
429
+ 'X-Api-Key': API_KEY,
430
+ 'Content-Type': 'application/json'
431
+ },
432
+ body: JSON.stringify({
433
+ image_url: imgURL,
434
+ size: 'auto'
435
+ }),
436
+ });
437
+ if (!response.ok) {
438
+ throw new Error("Failed to remove background.");
439
+ }
440
+ const buffer = await response.arrayBuffer();
441
+ return Buffer.from(buffer);
442
+ }
443
+ catch (error) {
444
+ console.error('Error:', error);
445
+ return undefined;
446
+ }
447
+ }
448
+ function flipCanvas(ctx, width, height, horizontal = false, vertical = false) {
449
+ const imageData = ctx.getImageData(0, 0, width, height);
450
+ const pixels = imageData.data;
451
+ const newData = new Uint8ClampedArray(pixels.length);
452
+ for (let y = 0; y < height; y++) {
453
+ for (let x = 0; x < width; x++) {
454
+ const srcIndex = (y * width + x) * 4;
455
+ let destX = horizontal ? width - x - 1 : x;
456
+ let destY = vertical ? height - y - 1 : y;
457
+ const destIndex = (destY * width + destX) * 4;
458
+ newData[destIndex] = pixels[srcIndex];
459
+ newData[destIndex + 1] = pixels[srcIndex + 1];
460
+ newData[destIndex + 2] = pixels[srcIndex + 2];
461
+ newData[destIndex + 3] = pixels[srcIndex + 3];
462
+ }
463
+ }
464
+ ctx.putImageData(new ImageData(newData, width, height), 0, 0);
465
+ }
466
+ function rotateCanvas(ctx, canvas, degrees) {
467
+ const radians = (degrees * Math.PI) / 180;
468
+ const newCanvas = (0, canvas_1.createCanvas)(canvas.width, canvas.height);
469
+ const newCtx = newCanvas.getContext("2d");
470
+ newCtx.translate(canvas.width / 2, canvas.height / 2);
471
+ newCtx.rotate(radians);
472
+ newCtx.drawImage(canvas, -canvas.width / 2, -canvas.height / 2);
473
+ ctx.clearRect(0, 0, canvas.width, canvas.height);
474
+ ctx.drawImage(newCanvas, 0, 0);
475
+ }
476
+ function adjustBrightness(ctx, value) {
477
+ const imageData = ctx.getImageData(0, 0, ctx.canvas.width, ctx.canvas.height);
478
+ const pixels = imageData.data;
479
+ for (let i = 0; i < pixels.length; i += 4) {
480
+ pixels[i] += 255 * value;
481
+ pixels[i + 1] += 255 * value;
482
+ pixels[i + 2] += 255 * value;
483
+ }
484
+ ctx.putImageData(imageData, 0, 0);
485
+ }
486
+ function adjustContrast(ctx, value) {
487
+ const factor = (259 * (value + 255)) / (255 * (259 - value));
488
+ const imageData = ctx.getImageData(0, 0, ctx.canvas.width, ctx.canvas.height);
489
+ const pixels = imageData.data;
490
+ for (let i = 0; i < pixels.length; i += 4) {
491
+ pixels[i] = factor * (pixels[i] - 128) + 128;
492
+ pixels[i + 1] = factor * (pixels[i + 1] - 128) + 128;
493
+ pixels[i + 2] = factor * (pixels[i + 2] - 128) + 128;
494
+ }
495
+ ctx.putImageData(imageData, 0, 0);
496
+ }
497
+ function invertColors(ctx) {
498
+ const imageData = ctx.getImageData(0, 0, ctx.canvas.width, ctx.canvas.height);
499
+ const pixels = imageData.data;
500
+ for (let i = 0; i < pixels.length; i += 4) {
501
+ pixels[i] = 255 - pixels[i];
502
+ pixels[i + 1] = 255 - pixels[i + 1];
503
+ pixels[i + 2] = 255 - pixels[i + 2];
504
+ }
505
+ ctx.putImageData(imageData, 0, 0);
506
+ }
507
+ function grayscale(ctx) {
508
+ const imageData = ctx.getImageData(0, 0, ctx.canvas.width, ctx.canvas.height);
509
+ const pixels = imageData.data;
510
+ for (let i = 0; i < pixels.length; i += 4) {
511
+ const avg = (pixels[i] + pixels[i + 1] + pixels[i + 2]) / 3;
512
+ pixels[i] = pixels[i + 1] = pixels[i + 2] = avg;
513
+ }
514
+ ctx.putImageData(imageData, 0, 0);
515
+ }
516
+ function applySepia(ctx) {
517
+ const imageData = ctx.getImageData(0, 0, ctx.canvas.width, ctx.canvas.height);
518
+ const pixels = imageData.data;
519
+ for (let i = 0; i < pixels.length; i += 4) {
520
+ const r = pixels[i];
521
+ const g = pixels[i + 1];
522
+ const b = pixels[i + 2];
523
+ pixels[i] = r * 0.393 + g * 0.769 + b * 0.189;
524
+ pixels[i + 1] = r * 0.349 + g * 0.686 + b * 0.168;
525
+ pixels[i + 2] = r * 0.272 + g * 0.534 + b * 0.131;
526
+ }
527
+ ctx.putImageData(imageData, 0, 0);
528
+ }
529
+ function applyBlur(ctx, radius) {
530
+ if (radius <= 0)
531
+ return;
532
+ const imageData = ctx.getImageData(0, 0, ctx.canvas.width, ctx.canvas.height);
533
+ const pixels = imageData.data;
534
+ const width = ctx.canvas.width;
535
+ const height = ctx.canvas.height;
536
+ const blurSize = Math.floor(radius);
537
+ for (let y = blurSize; y < height - blurSize; y++) {
538
+ for (let x = blurSize; x < width - blurSize; x++) {
539
+ let r = 0, g = 0, b = 0, count = 0;
540
+ for (let dy = -blurSize; dy <= blurSize; dy++) {
541
+ for (let dx = -blurSize; dx <= blurSize; dx++) {
542
+ const index = ((y + dy) * width + (x + dx)) * 4;
543
+ r += pixels[index];
544
+ g += pixels[index + 1];
545
+ b += pixels[index + 2];
546
+ count++;
547
+ }
548
+ }
549
+ const index = (y * width + x) * 4;
550
+ pixels[index] = r / count;
551
+ pixels[index + 1] = g / count;
552
+ pixels[index + 2] = b / count;
553
+ }
554
+ }
555
+ ctx.putImageData(imageData, 0, 0);
556
+ }
557
+ function posterize(ctx, levels) {
558
+ if (levels < 2 || levels > 255)
559
+ return;
560
+ const imageData = ctx.getImageData(0, 0, ctx.canvas.width, ctx.canvas.height);
561
+ const pixels = imageData.data;
562
+ const factor = 255 / (levels - 1);
563
+ for (let i = 0; i < pixels.length; i += 4) {
564
+ pixels[i] = Math.round(pixels[i] / factor) * factor;
565
+ pixels[i + 1] = Math.round(pixels[i + 1] / factor) * factor;
566
+ pixels[i + 2] = Math.round(pixels[i + 2] / factor) * factor;
567
+ }
568
+ ctx.putImageData(imageData, 0, 0);
569
+ }
570
+ function pixelate(ctx, size, startX = 0, startY = 0, width = ctx.canvas.width, height = ctx.canvas.height) {
571
+ if (size < 1)
572
+ return;
573
+ const imageData = ctx.getImageData(startX, startY, width, height);
574
+ const pixels = imageData.data;
575
+ for (let y = 0; y < height; y += size) {
576
+ for (let x = 0; x < width; x += size) {
577
+ let r = 0, g = 0, b = 0, count = 0;
578
+ for (let dy = 0; dy < size; dy++) {
579
+ for (let dx = 0; dx < size; dx++) {
580
+ if (x + dx < width && y + dy < height) {
581
+ const index = ((y + dy) * width + (x + dx)) * 4;
582
+ r += pixels[index];
583
+ g += pixels[index + 1];
584
+ b += pixels[index + 2];
585
+ count++;
586
+ }
587
+ }
588
+ }
589
+ r = Math.floor(r / count);
590
+ g = Math.floor(g / count);
591
+ b = Math.floor(b / count);
592
+ for (let dy = 0; dy < size; dy++) {
593
+ for (let dx = 0; dx < size; dx++) {
594
+ if (x + dx < width && y + dy < height) {
595
+ const index = ((y + dy) * width + (x + dx)) * 4;
596
+ pixels[index] = r;
597
+ pixels[index + 1] = g;
598
+ pixels[index + 2] = b;
599
+ }
600
+ }
601
+ }
602
+ }
603
+ }
604
+ ctx.putImageData(imageData, startX, startY);
605
+ }
606
+ //# sourceMappingURL=general%20functions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"general functions.js","sourceRoot":"","sources":["../../../../../lib/canvas/utils/General/general functions.ts"],"names":[],"mappings":"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"}