apexify.js 4.5.54 → 4.5.56

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 (247) hide show
  1. package/dist/cjs/ai/ApexAI.d.ts +1 -164
  2. package/dist/cjs/ai/ApexAI.d.ts.map +1 -1
  3. package/dist/cjs/ai/ApexAI.js +190 -373
  4. package/dist/cjs/ai/ApexAI.js.map +1 -1
  5. package/dist/cjs/ai/ApexModules.d.ts +1 -1
  6. package/dist/cjs/ai/ApexModules.d.ts.map +1 -1
  7. package/dist/cjs/ai/ApexModules.js +6 -18
  8. package/dist/cjs/ai/ApexModules.js.map +1 -1
  9. package/dist/cjs/ai/functions/draw.d.ts.map +1 -1
  10. package/dist/cjs/ai/functions/draw.js +6 -6
  11. package/dist/cjs/ai/functions/draw.js.map +1 -1
  12. package/dist/cjs/ai/modals-chat/electronHub/imageModels.d.ts +1 -1
  13. package/dist/cjs/ai/modals-chat/electronHub/imageModels.d.ts.map +1 -1
  14. package/dist/cjs/ai/modals-chat/electronHub/imageModels.js +1 -4
  15. package/dist/cjs/ai/modals-chat/electronHub/imageModels.js.map +1 -1
  16. package/dist/cjs/ai/utils.d.ts +1 -4
  17. package/dist/cjs/ai/utils.d.ts.map +1 -1
  18. package/dist/cjs/ai/utils.js +1 -7
  19. package/dist/cjs/ai/utils.js.map +1 -1
  20. package/dist/cjs/canvas/ApexPainter.d.ts +17 -14
  21. package/dist/cjs/canvas/ApexPainter.d.ts.map +1 -1
  22. package/dist/cjs/canvas/ApexPainter.js +29 -11
  23. package/dist/cjs/canvas/ApexPainter.js.map +1 -1
  24. package/dist/cjs/canvas/utils/Background/bg.d.ts +24 -0
  25. package/dist/cjs/canvas/utils/Background/bg.d.ts.map +1 -0
  26. package/dist/{esm/canvas/utils → cjs/canvas/utils/Background}/bg.js +27 -52
  27. package/dist/cjs/canvas/utils/Background/bg.js.map +1 -0
  28. package/dist/cjs/canvas/utils/Background/circular.d.ts +3 -0
  29. package/dist/cjs/canvas/utils/Background/circular.d.ts.map +1 -0
  30. package/dist/{esm/canvas/utils → cjs/canvas/utils/Background}/circular.js +0 -8
  31. package/dist/cjs/canvas/utils/{circular.js.map → Background/circular.js.map} +1 -1
  32. package/dist/cjs/canvas/utils/Background/radius.d.ts +18 -0
  33. package/dist/cjs/canvas/utils/Background/radius.d.ts.map +1 -0
  34. package/dist/cjs/canvas/utils/Background/radius.js +115 -0
  35. package/dist/cjs/canvas/utils/Background/radius.js.map +1 -0
  36. package/dist/cjs/canvas/utils/{charts.d.ts → Charts/charts.d.ts} +1 -1
  37. package/dist/cjs/canvas/utils/Charts/charts.d.ts.map +1 -0
  38. package/dist/cjs/canvas/utils/Charts/charts.js.map +1 -0
  39. package/dist/cjs/canvas/utils/Custom/customLines.d.ts +3 -0
  40. package/dist/cjs/canvas/utils/Custom/customLines.d.ts.map +1 -0
  41. package/dist/cjs/canvas/utils/Custom/customLines.js.map +1 -0
  42. package/dist/cjs/canvas/utils/General/conversion.d.ts.map +1 -0
  43. package/dist/cjs/canvas/utils/General/conversion.js.map +1 -0
  44. package/dist/cjs/canvas/utils/{general functions.d.ts → General/general functions.d.ts } +18 -4
  45. package/dist/cjs/canvas/utils/General/general functions.d.ts.map +1 -0
  46. package/dist/{esm/canvas/utils → cjs/canvas/utils/General}/general functions.js +89 -58
  47. package/dist/cjs/canvas/utils/General/general functions.js.map +1 -0
  48. package/dist/cjs/canvas/utils/Image/imageProperties.d.ts +81 -0
  49. package/dist/cjs/canvas/utils/Image/imageProperties.d.ts.map +1 -0
  50. package/dist/{esm/canvas/utils → cjs/canvas/utils/Image}/imageProperties.js +224 -45
  51. package/dist/cjs/canvas/utils/Image/imageProperties.js.map +1 -0
  52. package/dist/{esm/canvas/utils → cjs/canvas/utils/Texts}/textProperties.d.ts +1 -1
  53. package/dist/cjs/canvas/utils/Texts/textProperties.d.ts.map +1 -0
  54. package/dist/cjs/canvas/utils/Texts/textProperties.js.map +1 -0
  55. package/dist/cjs/canvas/utils/types.d.ts +41 -1
  56. package/dist/cjs/canvas/utils/types.d.ts.map +1 -1
  57. package/dist/cjs/canvas/utils/types.js.map +1 -1
  58. package/dist/cjs/canvas/utils/utils.d.ts +11 -11
  59. package/dist/cjs/canvas/utils/utils.d.ts.map +1 -1
  60. package/dist/cjs/canvas/utils/utils.js +11 -10
  61. package/dist/cjs/canvas/utils/utils.js.map +1 -1
  62. package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
  63. package/dist/esm/ai/ApexAI.d.ts +1 -164
  64. package/dist/esm/ai/ApexAI.d.ts.map +1 -1
  65. package/dist/esm/ai/ApexAI.js +190 -373
  66. package/dist/esm/ai/ApexAI.js.map +1 -1
  67. package/dist/esm/ai/ApexModules.d.ts +1 -1
  68. package/dist/esm/ai/ApexModules.d.ts.map +1 -1
  69. package/dist/esm/ai/ApexModules.js +6 -18
  70. package/dist/esm/ai/ApexModules.js.map +1 -1
  71. package/dist/esm/ai/functions/draw.d.ts.map +1 -1
  72. package/dist/esm/ai/functions/draw.js +6 -6
  73. package/dist/esm/ai/functions/draw.js.map +1 -1
  74. package/dist/esm/ai/modals-chat/electronHub/imageModels.d.ts +1 -1
  75. package/dist/esm/ai/modals-chat/electronHub/imageModels.d.ts.map +1 -1
  76. package/dist/esm/ai/modals-chat/electronHub/imageModels.js +1 -4
  77. package/dist/esm/ai/modals-chat/electronHub/imageModels.js.map +1 -1
  78. package/dist/esm/ai/utils.d.ts +1 -4
  79. package/dist/esm/ai/utils.d.ts.map +1 -1
  80. package/dist/esm/ai/utils.js +1 -7
  81. package/dist/esm/ai/utils.js.map +1 -1
  82. package/dist/esm/canvas/ApexPainter.d.ts +17 -14
  83. package/dist/esm/canvas/ApexPainter.d.ts.map +1 -1
  84. package/dist/esm/canvas/ApexPainter.js +29 -11
  85. package/dist/esm/canvas/ApexPainter.js.map +1 -1
  86. package/dist/esm/canvas/utils/Background/bg.d.ts +24 -0
  87. package/dist/esm/canvas/utils/Background/bg.d.ts.map +1 -0
  88. package/dist/{cjs/canvas/utils → esm/canvas/utils/Background}/bg.js +27 -52
  89. package/dist/esm/canvas/utils/Background/bg.js.map +1 -0
  90. package/dist/esm/canvas/utils/Background/circular.d.ts +3 -0
  91. package/dist/esm/canvas/utils/Background/circular.d.ts.map +1 -0
  92. package/dist/{cjs/canvas/utils → esm/canvas/utils/Background}/circular.js +0 -8
  93. package/dist/esm/canvas/utils/{circular.js.map → Background/circular.js.map} +1 -1
  94. package/dist/esm/canvas/utils/Background/radius.d.ts +18 -0
  95. package/dist/esm/canvas/utils/Background/radius.d.ts.map +1 -0
  96. package/dist/esm/canvas/utils/Background/radius.js +115 -0
  97. package/dist/esm/canvas/utils/Background/radius.js.map +1 -0
  98. package/dist/esm/canvas/utils/{charts.d.ts → Charts/charts.d.ts} +1 -1
  99. package/dist/esm/canvas/utils/Charts/charts.d.ts.map +1 -0
  100. package/dist/esm/canvas/utils/Charts/charts.js.map +1 -0
  101. package/dist/esm/canvas/utils/Custom/customLines.d.ts +3 -0
  102. package/dist/esm/canvas/utils/Custom/customLines.d.ts.map +1 -0
  103. package/dist/esm/canvas/utils/Custom/customLines.js.map +1 -0
  104. package/dist/esm/canvas/utils/General/conversion.d.ts.map +1 -0
  105. package/dist/esm/canvas/utils/General/conversion.js.map +1 -0
  106. package/dist/esm/canvas/utils/{general functions.d.ts → General/general functions.d.ts } +18 -4
  107. package/dist/esm/canvas/utils/General/general functions.d.ts.map +1 -0
  108. package/dist/{cjs/canvas/utils → esm/canvas/utils/General}/general functions.js +89 -58
  109. package/dist/esm/canvas/utils/General/general functions.js.map +1 -0
  110. package/dist/esm/canvas/utils/Image/imageProperties.d.ts +81 -0
  111. package/dist/esm/canvas/utils/Image/imageProperties.d.ts.map +1 -0
  112. package/dist/{cjs/canvas/utils → esm/canvas/utils/Image}/imageProperties.js +224 -45
  113. package/dist/esm/canvas/utils/Image/imageProperties.js.map +1 -0
  114. package/dist/{cjs/canvas/utils → esm/canvas/utils/Texts}/textProperties.d.ts +1 -1
  115. package/dist/esm/canvas/utils/Texts/textProperties.d.ts.map +1 -0
  116. package/dist/esm/canvas/utils/Texts/textProperties.js.map +1 -0
  117. package/dist/esm/canvas/utils/types.d.ts +41 -1
  118. package/dist/esm/canvas/utils/types.d.ts.map +1 -1
  119. package/dist/esm/canvas/utils/types.js.map +1 -1
  120. package/dist/esm/canvas/utils/utils.d.ts +11 -11
  121. package/dist/esm/canvas/utils/utils.d.ts.map +1 -1
  122. package/dist/esm/canvas/utils/utils.js +11 -10
  123. package/dist/esm/canvas/utils/utils.js.map +1 -1
  124. package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
  125. package/lib/ai/ApexAI.ts +195 -697
  126. package/lib/ai/ApexModules.ts +7 -17
  127. package/lib/ai/functions/draw.ts +6 -8
  128. package/lib/ai/modals-chat/electronHub/imageModels.ts +2 -5
  129. package/lib/ai/utils.ts +0 -6
  130. package/lib/canvas/ApexPainter.ts +73 -38
  131. package/lib/canvas/utils/Background/bg.ts +97 -0
  132. package/lib/canvas/utils/Background/circular.ts +17 -0
  133. package/lib/canvas/utils/Background/radius.ts +113 -0
  134. package/lib/canvas/utils/{charts.ts → Charts/charts.ts} +1 -1
  135. package/lib/canvas/utils/{customLines.ts → Custom/customLines.ts} +1 -1
  136. package/lib/canvas/utils/{conversion.ts → General/conversion.ts} +1 -1
  137. package/lib/canvas/utils/{general functions.ts → General/general functions.ts } +143 -121
  138. package/lib/canvas/utils/Image/imageProperties.ts +631 -0
  139. package/lib/canvas/utils/{textProperties.ts → Texts/textProperties.ts} +1 -1
  140. package/lib/canvas/utils/types.ts +45 -2
  141. package/lib/canvas/utils/utils.ts +14 -11
  142. package/package.json +1 -4
  143. package/dist/cjs/ai/functions/generateVoiceResponse.d.ts +0 -10
  144. package/dist/cjs/ai/functions/generateVoiceResponse.d.ts.map +0 -1
  145. package/dist/cjs/ai/functions/generateVoiceResponse.js +0 -161
  146. package/dist/cjs/ai/functions/generateVoiceResponse.js.map +0 -1
  147. package/dist/cjs/ai/modals-chat/gemini/Gemini-flash.d.ts +0 -13
  148. package/dist/cjs/ai/modals-chat/gemini/Gemini-flash.d.ts.map +0 -1
  149. package/dist/cjs/ai/modals-chat/gemini/Gemini-flash.js +0 -185
  150. package/dist/cjs/ai/modals-chat/gemini/Gemini-flash.js.map +0 -1
  151. package/dist/cjs/ai/modals-chat/gemini/Gemini-pro.d.ts +0 -13
  152. package/dist/cjs/ai/modals-chat/gemini/Gemini-pro.d.ts.map +0 -1
  153. package/dist/cjs/ai/modals-chat/gemini/Gemini-pro.js +0 -185
  154. package/dist/cjs/ai/modals-chat/gemini/Gemini-pro.js.map +0 -1
  155. package/dist/cjs/ai/modals-chat/gemini/config.d.ts +0 -5
  156. package/dist/cjs/ai/modals-chat/gemini/config.d.ts.map +0 -1
  157. package/dist/cjs/ai/modals-chat/gemini/config.js +0 -13
  158. package/dist/cjs/ai/modals-chat/gemini/config.js.map +0 -1
  159. package/dist/cjs/ai/modals-chat/gemini/geminiFast.d.ts +0 -15
  160. package/dist/cjs/ai/modals-chat/gemini/geminiFast.d.ts.map +0 -1
  161. package/dist/cjs/ai/modals-chat/gemini/geminiFast.js +0 -146
  162. package/dist/cjs/ai/modals-chat/gemini/geminiFast.js.map +0 -1
  163. package/dist/cjs/canvas/utils/bg.d.ts +0 -23
  164. package/dist/cjs/canvas/utils/bg.d.ts.map +0 -1
  165. package/dist/cjs/canvas/utils/bg.js.map +0 -1
  166. package/dist/cjs/canvas/utils/charts.d.ts.map +0 -1
  167. package/dist/cjs/canvas/utils/charts.js.map +0 -1
  168. package/dist/cjs/canvas/utils/circular.d.ts +0 -10
  169. package/dist/cjs/canvas/utils/circular.d.ts.map +0 -1
  170. package/dist/cjs/canvas/utils/conversion.d.ts.map +0 -1
  171. package/dist/cjs/canvas/utils/conversion.js.map +0 -1
  172. package/dist/cjs/canvas/utils/customLines.d.ts +0 -3
  173. package/dist/cjs/canvas/utils/customLines.d.ts.map +0 -1
  174. package/dist/cjs/canvas/utils/customLines.js.map +0 -1
  175. package/dist/cjs/canvas/utils/general functions.d.ts.map +0 -1
  176. package/dist/cjs/canvas/utils/general functions.js.map +0 -1
  177. package/dist/cjs/canvas/utils/imageProperties.d.ts +0 -62
  178. package/dist/cjs/canvas/utils/imageProperties.d.ts.map +0 -1
  179. package/dist/cjs/canvas/utils/imageProperties.js.map +0 -1
  180. package/dist/cjs/canvas/utils/radius.d.ts +0 -10
  181. package/dist/cjs/canvas/utils/radius.d.ts.map +0 -1
  182. package/dist/cjs/canvas/utils/radius.js +0 -30
  183. package/dist/cjs/canvas/utils/radius.js.map +0 -1
  184. package/dist/cjs/canvas/utils/textProperties.d.ts.map +0 -1
  185. package/dist/cjs/canvas/utils/textProperties.js.map +0 -1
  186. package/dist/esm/ai/functions/generateVoiceResponse.d.ts +0 -10
  187. package/dist/esm/ai/functions/generateVoiceResponse.d.ts.map +0 -1
  188. package/dist/esm/ai/functions/generateVoiceResponse.js +0 -161
  189. package/dist/esm/ai/functions/generateVoiceResponse.js.map +0 -1
  190. package/dist/esm/ai/modals-chat/gemini/Gemini-flash.d.ts +0 -13
  191. package/dist/esm/ai/modals-chat/gemini/Gemini-flash.d.ts.map +0 -1
  192. package/dist/esm/ai/modals-chat/gemini/Gemini-flash.js +0 -185
  193. package/dist/esm/ai/modals-chat/gemini/Gemini-flash.js.map +0 -1
  194. package/dist/esm/ai/modals-chat/gemini/Gemini-pro.d.ts +0 -13
  195. package/dist/esm/ai/modals-chat/gemini/Gemini-pro.d.ts.map +0 -1
  196. package/dist/esm/ai/modals-chat/gemini/Gemini-pro.js +0 -185
  197. package/dist/esm/ai/modals-chat/gemini/Gemini-pro.js.map +0 -1
  198. package/dist/esm/ai/modals-chat/gemini/config.d.ts +0 -5
  199. package/dist/esm/ai/modals-chat/gemini/config.d.ts.map +0 -1
  200. package/dist/esm/ai/modals-chat/gemini/config.js +0 -13
  201. package/dist/esm/ai/modals-chat/gemini/config.js.map +0 -1
  202. package/dist/esm/ai/modals-chat/gemini/geminiFast.d.ts +0 -15
  203. package/dist/esm/ai/modals-chat/gemini/geminiFast.d.ts.map +0 -1
  204. package/dist/esm/ai/modals-chat/gemini/geminiFast.js +0 -146
  205. package/dist/esm/ai/modals-chat/gemini/geminiFast.js.map +0 -1
  206. package/dist/esm/canvas/utils/bg.d.ts +0 -23
  207. package/dist/esm/canvas/utils/bg.d.ts.map +0 -1
  208. package/dist/esm/canvas/utils/bg.js.map +0 -1
  209. package/dist/esm/canvas/utils/charts.d.ts.map +0 -1
  210. package/dist/esm/canvas/utils/charts.js.map +0 -1
  211. package/dist/esm/canvas/utils/circular.d.ts +0 -10
  212. package/dist/esm/canvas/utils/circular.d.ts.map +0 -1
  213. package/dist/esm/canvas/utils/conversion.d.ts.map +0 -1
  214. package/dist/esm/canvas/utils/conversion.js.map +0 -1
  215. package/dist/esm/canvas/utils/customLines.d.ts +0 -3
  216. package/dist/esm/canvas/utils/customLines.d.ts.map +0 -1
  217. package/dist/esm/canvas/utils/customLines.js.map +0 -1
  218. package/dist/esm/canvas/utils/general functions.d.ts.map +0 -1
  219. package/dist/esm/canvas/utils/general functions.js.map +0 -1
  220. package/dist/esm/canvas/utils/imageProperties.d.ts +0 -62
  221. package/dist/esm/canvas/utils/imageProperties.d.ts.map +0 -1
  222. package/dist/esm/canvas/utils/imageProperties.js.map +0 -1
  223. package/dist/esm/canvas/utils/radius.d.ts +0 -10
  224. package/dist/esm/canvas/utils/radius.d.ts.map +0 -1
  225. package/dist/esm/canvas/utils/radius.js +0 -30
  226. package/dist/esm/canvas/utils/radius.js.map +0 -1
  227. package/dist/esm/canvas/utils/textProperties.d.ts.map +0 -1
  228. package/dist/esm/canvas/utils/textProperties.js.map +0 -1
  229. package/lib/ai/functions/generateVoiceResponse.ts +0 -186
  230. package/lib/ai/modals-chat/gemini/Gemini-flash.ts +0 -200
  231. package/lib/ai/modals-chat/gemini/Gemini-pro.ts +0 -203
  232. package/lib/ai/modals-chat/gemini/config.ts +0 -11
  233. package/lib/ai/modals-chat/gemini/geminiFast.ts +0 -169
  234. package/lib/canvas/utils/bg.ts +0 -120
  235. package/lib/canvas/utils/circular.ts +0 -17
  236. package/lib/canvas/utils/imageProperties.ts +0 -418
  237. package/lib/canvas/utils/radius.ts +0 -26
  238. /package/dist/cjs/canvas/utils/{charts.js → Charts/charts.js} +0 -0
  239. /package/dist/cjs/canvas/utils/{customLines.js → Custom/customLines.js} +0 -0
  240. /package/dist/cjs/canvas/utils/{conversion.d.ts → General/conversion.d.ts} +0 -0
  241. /package/dist/cjs/canvas/utils/{conversion.js → General/conversion.js} +0 -0
  242. /package/dist/cjs/canvas/utils/{textProperties.js → Texts/textProperties.js} +0 -0
  243. /package/dist/esm/canvas/utils/{charts.js → Charts/charts.js} +0 -0
  244. /package/dist/esm/canvas/utils/{customLines.js → Custom/customLines.js} +0 -0
  245. /package/dist/esm/canvas/utils/{conversion.d.ts → General/conversion.d.ts} +0 -0
  246. /package/dist/esm/canvas/utils/{conversion.js → General/conversion.js} +0 -0
  247. /package/dist/esm/canvas/utils/{textProperties.js → Texts/textProperties.js} +0 -0
@@ -1,7 +1,7 @@
1
1
  import path from 'path'
2
2
  import sharp from 'sharp';
3
- import { cropOptions } from './types';
4
- import { createCanvas, loadImage } from '@napi-rs/canvas';
3
+ import { cropOptions, ResizeOptions } from '../types';
4
+ import { createCanvas, loadImage, SKRSContext2D } from '@napi-rs/canvas';
5
5
  import fs from "fs";
6
6
  import axios from "axios";
7
7
 
@@ -28,41 +28,53 @@ export async function loadImages(imagePath: string) {
28
28
  }
29
29
  }
30
30
 
31
- export async function resizingImg(resizeOptions: any): Promise<Buffer> {
31
+
32
+ /**
33
+ * Resizes an image using Sharp with additional options for quality, kernel, and withoutEnlargement.
34
+ *
35
+ * @param resizeOptions - The options for resizing.
36
+ * @returns A Promise that resolves with the resized image as a Buffer.
37
+ */
38
+ export async function resizingImg(resizeOptions: ResizeOptions): Promise<Buffer> {
32
39
  try {
33
- if (!resizeOptions.imagePath) {
34
- throw new Error("Image path is required for resizing.");
35
- }
40
+ if (!resizeOptions.imagePath) {
41
+ throw new Error("Image path is required for resizing.");
42
+ }
36
43
 
37
- let absoluteImagePath;
38
-
39
- if (resizeOptions.imagePath.startsWith("http")) {
40
- absoluteImagePath = resizeOptions.imagePath;
41
- } else {
42
- absoluteImagePath = path.join(process.cwd(), resizeOptions.imagePath);
43
- }
44
+ let absoluteImagePath: string;
45
+ if (resizeOptions.imagePath.startsWith("http")) {
46
+ absoluteImagePath = resizeOptions.imagePath;
47
+ } else {
48
+ absoluteImagePath = path.join(process.cwd(), resizeOptions.imagePath);
49
+ }
50
+
51
+ const image = sharp(absoluteImagePath);
44
52
 
45
- let image = sharp(absoluteImagePath);
53
+ const resizeOptionsForSharp: sharp.ResizeOptions = {
54
+ width: resizeOptions.size?.width || 500,
55
+ height: resizeOptions.size?.height || 500,
56
+ fit: resizeOptions.maintainAspectRatio ? sharp.fit.inside : sharp.fit.fill,
57
+ kernel: sharp.kernel.lanczos3,
58
+ withoutEnlargement: true,
59
+ };
46
60
 
47
- const resizeOptionsForSharp = {
48
- width: resizeOptions.size?.width || 500,
49
- height: resizeOptions.size?.height || 500,
50
- fit: resizeOptions.maintainAspectRatio ? sharp.fit.inside : sharp.fit.fill
51
- };
61
+ const quality = resizeOptions.quality ?? 90;
52
62
 
53
- const resizedBuffer = await image
54
- .resize(resizeOptionsForSharp)
55
- .png()
56
- .toBuffer();
63
+ const resizedBuffer: Buffer = await image
64
+ .resize(resizeOptionsForSharp)
65
+ .png({ quality })
66
+ .toBuffer();
67
+
57
68
 
58
- return resizedBuffer;
69
+ return resizedBuffer;
59
70
 
60
71
  } catch (error) {
61
- console.error("Error resizing image:", error);
62
- throw new Error("Failed to resize image");
72
+ console.error("Error resizing image:", error);
73
+ throw new Error("Failed to resize image");
63
74
  }
64
75
  }
65
76
 
77
+
66
78
  export async function converter(imagePath: string, newExtension: string) {
67
79
  try {
68
80
  const validExtensions: (keyof sharp.FormatEnum)[] = ['jpeg', 'png', 'webp', 'tiff', 'gif', 'avif', 'heif', 'raw', 'pdf', 'svg'];
@@ -249,114 +261,124 @@ export async function imgEffects(imagePath: string, filters: any[]) {
249
261
  }
250
262
 
251
263
 
252
- export async function cropInner(options: cropOptions): Promise<any> {
253
- try {
254
-
255
- let image;
256
-
257
- if (options.imageSource.startsWith('http')) {
258
- image = await loadImage(options.imageSource);
259
- } else {
260
- image = await loadImage(path.join(process.cwd(), options.imageSource));
261
- }
262
-
263
- const width = Math.abs(options.coordinates[0].from.x - options.coordinates[1].to.x);
264
- const height = Math.abs(options.coordinates[0].from.y - options.coordinates[2].to.y);
265
-
266
- const canvas = createCanvas(width, height);
267
- const ctx = canvas.getContext('2d');
268
-
269
- if (options.radius === 'circular') {
270
- const radius = Math.min(width, height) / 2;
271
- ctx.arc(width / 2, height / 2, radius, 0, Math.PI * 2);
272
- ctx.closePath();
273
- ctx.clip();
274
- } else if (typeof options.radius === 'number' && options.radius >= 0) {
275
- ctx.beginPath();
276
- ctx.moveTo(options.radius, 0);
277
- ctx.lineTo(width - options.radius, 0);
278
- ctx.quadraticCurveTo(width, 0, width, options.radius);
279
- ctx.lineTo(width, height - options.radius);
280
- ctx.quadraticCurveTo(width, height, width - options.radius, height);
281
- ctx.lineTo(options.radius, height);
282
- ctx.quadraticCurveTo(0, height, 0, height - options.radius);
283
- ctx.lineTo(0, options.radius);
284
- ctx.quadraticCurveTo(0, 0, options.radius, 0);
285
- ctx.closePath();
286
- ctx.clip();
287
- // @ts-ignore
288
- } else if (options.radius !== null && options.radius !== 'circular' && (typeof options.radius !== 'number' || options.radius < 0)) {
289
- throw new Error('The "radius" option can only be "circular" or a non-negative number.');
290
- }
291
-
292
-
293
- ctx.drawImage(image, options.coordinates[0].from.x, options.coordinates[0].from.y, width, height, 0, 0, width, height);
264
+ /**
265
+ * Crops the inner portion of the image based on the bounding box of the provided coordinates.
266
+ * Optionally applies a clipping mask with a specified radius.
267
+ */
268
+ export async function cropInner(options: cropOptions): Promise<Buffer> {
269
+ try {
270
+ // Load the image (from HTTP or local path)
271
+ let image;
272
+ if (options.imageSource.startsWith("http")) {
273
+ image = await loadImage(options.imageSource);
274
+ } else {
275
+ image = await loadImage(path.join(process.cwd(), options.imageSource));
276
+ }
294
277
 
278
+ // Compute the bounding box from all coordinate points.
279
+ const xs: number[] = [];
280
+ const ys: number[] = [];
281
+ for (const coord of options.coordinates) {
282
+ xs.push(coord.from.x, coord.to.x);
283
+ ys.push(coord.from.y, coord.to.y);
284
+ }
285
+ const minX = Math.min(...xs);
286
+ const maxX = Math.max(...xs);
287
+ const minY = Math.min(...ys);
288
+ const maxY = Math.max(...ys);
289
+ const cropWidth = maxX - minX;
290
+ const cropHeight = maxY - minY;
291
+
292
+ // Create a canvas with the crop dimensions.
293
+ const canvas = createCanvas(cropWidth, cropHeight);
294
+ const ctx = canvas.getContext('2d') as SKRSContext2D;
295
+ if (!ctx) throw new Error("Unable to get 2D context");
296
+
297
+ // Optionally, apply a clipping mask if a radius is provided.
298
+ if (options.radius !== undefined && options.radius !== null) {
299
+ if (options.radius === "circular") {
300
+ const radius = Math.min(cropWidth, cropHeight) / 2;
295
301
  ctx.beginPath();
296
- for (let i = 0; i < options.coordinates.length; i++) {
297
- const coordinate = options.coordinates[i];
298
- const nextCoordinate = options.coordinates[(i + 1) % options.coordinates.length];
299
- const tension = coordinate.tension || 0;
300
- const cp1x = coordinate.from.x + (nextCoordinate.from.x - coordinate.from.x) * tension;
301
- const cp1y = coordinate.from.y + (nextCoordinate.from.y - coordinate.from.y) * tension;
302
- const cp2x = coordinate.to.x - (nextCoordinate.to.x - coordinate.to.x) * tension;
303
- const cp2y = coordinate.to.y - (nextCoordinate.to.y - coordinate.to.y) * tension;
304
- ctx.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, coordinate.to.x, coordinate.to.y);
305
- }
302
+ ctx.arc(cropWidth / 2, cropHeight / 2, radius, 0, Math.PI * 2);
306
303
  ctx.closePath();
307
-
308
- const buffer = canvas.toBuffer('image/png');
309
-
310
- return buffer;
311
-
312
- } catch (error) {
313
- console.error('An error occurred:', error);
314
- throw error;
315
- }
316
- }
317
-
318
- export async function cropOuter(options: cropOptions): Promise<any> {
319
- try {
320
-
321
- let image;
322
-
323
- if (options.imageSource.startsWith('http')) {
324
- image = await loadImage(options.imageSource);
304
+ ctx.clip();
305
+ } else if (typeof options.radius === 'number' && options.radius >= 0) {
306
+ ctx.beginPath();
307
+ ctx.moveTo(options.radius, 0);
308
+ ctx.lineTo(cropWidth - options.radius, 0);
309
+ ctx.quadraticCurveTo(cropWidth, 0, cropWidth, options.radius);
310
+ ctx.lineTo(cropWidth, cropHeight - options.radius);
311
+ ctx.quadraticCurveTo(cropWidth, cropHeight, cropWidth - options.radius, cropHeight);
312
+ ctx.lineTo(options.radius, cropHeight);
313
+ ctx.quadraticCurveTo(0, cropHeight, 0, cropHeight - options.radius);
314
+ ctx.lineTo(0, options.radius);
315
+ ctx.quadraticCurveTo(0, 0, options.radius, 0);
316
+ ctx.closePath();
317
+ ctx.clip();
325
318
  } else {
326
- image = await loadImage(path.join(process.cwd(), options.imageSource));
319
+ throw new Error('The "radius" option can only be "circular" or a non-negative number.');
327
320
  }
321
+ }
328
322
 
329
- const canvas = createCanvas(image.width, image.height);
330
- const ctx = canvas.getContext('2d');
323
+ // Draw the region from the original image corresponding to the bounding box.
324
+ // drawImage(image, sx, sy, sWidth, sHeight, dx, dy, dWidth, dHeight)
325
+ ctx.drawImage(image, minX, minY, cropWidth, cropHeight, 0, 0, cropWidth, cropHeight);
331
326
 
332
- ctx.drawImage(image, 0, 0);
327
+ return canvas.toBuffer('image/png');
328
+ } catch (error) {
329
+ console.error('An error occurred in cropInner:', error);
330
+ throw error;
331
+ }
332
+ }
333
333
 
334
- ctx.beginPath();
335
- ctx.moveTo(options.coordinates[0].from.x, options.coordinates[0].from.y);
336
- for (let i = 0; i < options.coordinates.length; i++) {
337
- const coordinate = options.coordinates[i];
338
- const nextCoordinate = options.coordinates[(i + 1) % options.coordinates.length];
339
- const tension = coordinate.tension || 0;
340
- const cp1x = coordinate.from.x + (nextCoordinate.from.x - coordinate.from.x) * tension;
341
- const cp1y = coordinate.from.y + (nextCoordinate.from.y - coordinate.from.y) * tension;
342
- const cp2x = coordinate.to.x - (nextCoordinate.to.x - coordinate.to.x) * tension;
343
- const cp2y = coordinate.to.y - (nextCoordinate.to.y - coordinate.to.y) * tension;
344
- ctx.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, coordinate.to.x, coordinate.to.y);
345
- }
346
- ctx.closePath();
334
+ /**
335
+ * Crops the outer portion of the image by removing the area defined by the provided polygon.
336
+ * The polygon is defined by the coordinates (with optional bezier smoothing using tension).
337
+ */
338
+ export async function cropOuter(options: cropOptions): Promise<Buffer> {
339
+ try {
340
+ let image;
341
+ if (options.imageSource.startsWith("http")) {
342
+ image = await loadImage(options.imageSource);
343
+ } else {
344
+ image = await loadImage(path.join(process.cwd(), options.imageSource));
345
+ }
347
346
 
348
- ctx.clip();
347
+ // Create a canvas matching the full image dimensions.
348
+ const canvas = createCanvas(image.width, image.height);
349
+ const ctx = canvas.getContext('2d') as SKRSContext2D;
350
+ if (!ctx) throw new Error("Unable to get 2D context");
349
351
 
350
- ctx.clearRect(0, 0, canvas.width, canvas.height);
352
+ // Draw the full image.
353
+ ctx.drawImage(image, 0, 0);
351
354
 
352
- const buffer = canvas.toBuffer('image/png');
355
+ // Build the polygon path from the provided coordinates.
356
+ ctx.beginPath();
357
+ // Start at the first coordinate's "from" point.
358
+ ctx.moveTo(options.coordinates[0].from.x, options.coordinates[0].from.y);
359
+ for (let i = 0; i < options.coordinates.length; i++) {
360
+ const coord = options.coordinates[i];
361
+ const nextCoord = options.coordinates[(i + 1) % options.coordinates.length];
362
+ const tension = coord.tension || 0;
363
+ const cp1x = coord.from.x + (nextCoord.from.x - coord.from.x) * tension;
364
+ const cp1y = coord.from.y + (nextCoord.from.y - coord.from.y) * tension;
365
+ const cp2x = coord.to.x - (nextCoord.to.x - coord.to.x) * tension;
366
+ const cp2y = coord.to.y - (nextCoord.to.y - coord.to.y) * tension;
367
+ ctx.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, coord.to.x, coord.to.y);
368
+ }
369
+ ctx.closePath();
353
370
 
354
- return buffer;
371
+ // Set the clipping region to the polygon.
372
+ ctx.clip();
355
373
 
356
- } catch (error) {
357
- console.error('An error occurred:', error);
358
- throw error;
359
- }
374
+ // Clear the inner region defined by the clipping path.
375
+ ctx.clearRect(0, 0, canvas.width, canvas.height);
376
+
377
+ return canvas.toBuffer('image/png');
378
+ } catch (error) {
379
+ console.error('An error occurred in cropOuter:', error);
380
+ throw error;
381
+ }
360
382
  }
361
383
 
362
384