drp-imagesdk 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (84) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +665 -0
  3. package/dist/adjustments.d.ts +3 -0
  4. package/dist/adjustments.d.ts.map +1 -0
  5. package/dist/adjustments.js +57 -0
  6. package/dist/adjustments.js.map +1 -0
  7. package/dist/batch.d.ts +27 -0
  8. package/dist/batch.d.ts.map +1 -0
  9. package/dist/batch.js +99 -0
  10. package/dist/batch.js.map +1 -0
  11. package/dist/compress.d.ts +11 -0
  12. package/dist/compress.d.ts.map +1 -0
  13. package/dist/compress.js +273 -0
  14. package/dist/compress.js.map +1 -0
  15. package/dist/convert.d.ts +8 -0
  16. package/dist/convert.d.ts.map +1 -0
  17. package/dist/convert.js +116 -0
  18. package/dist/convert.js.map +1 -0
  19. package/dist/crop.d.ts +4 -0
  20. package/dist/crop.d.ts.map +1 -0
  21. package/dist/crop.js +32 -0
  22. package/dist/crop.js.map +1 -0
  23. package/dist/drp-class.d.ts +58 -0
  24. package/dist/drp-class.d.ts.map +1 -0
  25. package/dist/drp-class.js +191 -0
  26. package/dist/drp-class.js.map +1 -0
  27. package/dist/drp.d.ts +14 -0
  28. package/dist/drp.d.ts.map +1 -0
  29. package/dist/drp.js +23 -0
  30. package/dist/drp.js.map +1 -0
  31. package/dist/editor.d.ts +24 -0
  32. package/dist/editor.d.ts.map +1 -0
  33. package/dist/editor.js +153 -0
  34. package/dist/editor.js.map +1 -0
  35. package/dist/filters.d.ts +19 -0
  36. package/dist/filters.d.ts.map +1 -0
  37. package/dist/filters.js +207 -0
  38. package/dist/filters.js.map +1 -0
  39. package/dist/image-sdk.iife.js +1979 -0
  40. package/dist/image-sdk.iife.js.map +1 -0
  41. package/dist/image-sdk.min.js +1978 -0
  42. package/dist/image-sdk.umd.js +1980 -0
  43. package/dist/image-sdk.umd.js.map +1 -0
  44. package/dist/index.d.ts +25 -0
  45. package/dist/index.d.ts.map +1 -0
  46. package/dist/index.js +19 -0
  47. package/dist/index.js.map +1 -0
  48. package/dist/layers.d.ts +12 -0
  49. package/dist/layers.d.ts.map +1 -0
  50. package/dist/layers.js +174 -0
  51. package/dist/layers.js.map +1 -0
  52. package/dist/loader.d.ts +10 -0
  53. package/dist/loader.d.ts.map +1 -0
  54. package/dist/loader.js +114 -0
  55. package/dist/loader.js.map +1 -0
  56. package/dist/metadata.d.ts +6 -0
  57. package/dist/metadata.d.ts.map +1 -0
  58. package/dist/metadata.js +127 -0
  59. package/dist/metadata.js.map +1 -0
  60. package/dist/presets.d.ts +11 -0
  61. package/dist/presets.d.ts.map +1 -0
  62. package/dist/presets.js +28 -0
  63. package/dist/presets.js.map +1 -0
  64. package/dist/resize.d.ts +4 -0
  65. package/dist/resize.d.ts.map +1 -0
  66. package/dist/resize.js +68 -0
  67. package/dist/resize.js.map +1 -0
  68. package/dist/transform.d.ts +6 -0
  69. package/dist/transform.d.ts.map +1 -0
  70. package/dist/transform.js +94 -0
  71. package/dist/transform.js.map +1 -0
  72. package/dist/types.d.ts +153 -0
  73. package/dist/types.d.ts.map +1 -0
  74. package/dist/types.js +2 -0
  75. package/dist/types.js.map +1 -0
  76. package/dist/worker.d.ts +8 -0
  77. package/dist/worker.d.ts.map +1 -0
  78. package/dist/worker.js +124 -0
  79. package/dist/worker.js.map +1 -0
  80. package/dist/zoom.d.ts +14 -0
  81. package/dist/zoom.d.ts.map +1 -0
  82. package/dist/zoom.js +55 -0
  83. package/dist/zoom.js.map +1 -0
  84. package/package.json +92 -0
@@ -0,0 +1,127 @@
1
+ export async function readMetadata(file) {
2
+ const metadata = {};
3
+ if (file.type === 'image/jpeg') {
4
+ try {
5
+ metadata.exif = await readExifData(file);
6
+ }
7
+ catch {
8
+ metadata.exif = undefined;
9
+ }
10
+ }
11
+ return metadata;
12
+ }
13
+ async function readExifData(file) {
14
+ const buffer = await file.arrayBuffer();
15
+ const view = new DataView(buffer);
16
+ if (view.getUint16(0, false) !== 0xffd8) {
17
+ return {};
18
+ }
19
+ const metadata = {};
20
+ let offset = 2;
21
+ while (offset < buffer.byteLength) {
22
+ const marker = view.getUint16(offset, false);
23
+ offset += 2;
24
+ if (marker === 0xffe1) {
25
+ const length = view.getUint16(offset, false);
26
+ const exifData = parseExif(view, offset + 2, length - 2);
27
+ Object.assign(metadata, exifData);
28
+ break;
29
+ }
30
+ if ((marker & 0xff00) === 0xff00) {
31
+ const length = view.getUint16(offset, false);
32
+ offset += length;
33
+ }
34
+ else {
35
+ break;
36
+ }
37
+ }
38
+ return metadata;
39
+ }
40
+ function parseExif(view, start, _length) {
41
+ const metadata = {};
42
+ const header = String.fromCharCode(view.getUint8(start), view.getUint8(start + 1), view.getUint8(start + 2), view.getUint8(start + 3));
43
+ if (header !== 'Exif') {
44
+ return metadata;
45
+ }
46
+ const byteOrder = view.getUint16(start + 4, false);
47
+ const littleEndian = byteOrder === 0x4949;
48
+ metadata.byteOrder = littleEndian ? 'Little-endian' : 'Big-endian';
49
+ return metadata;
50
+ }
51
+ export function generateCustomMetadata(options) {
52
+ const custom = {};
53
+ if (options.custom) {
54
+ Object.assign(custom, options.custom);
55
+ }
56
+ custom.application = '@our-org/image-sdk';
57
+ custom.exportedAt = new Date().toISOString();
58
+ return custom;
59
+ }
60
+ export async function exportWithMetadata(blob, format, metadata) {
61
+ if (!metadata) {
62
+ return blob;
63
+ }
64
+ if (format === 'png') {
65
+ return addPngTextChunk(blob, metadata);
66
+ }
67
+ return blob;
68
+ }
69
+ async function addPngTextChunk(blob, metadata) {
70
+ const buffer = await blob.arrayBuffer();
71
+ const view = new DataView(buffer);
72
+ if (view.getUint32(0, false) !== 0x89504e47) {
73
+ return blob;
74
+ }
75
+ const chunks = [];
76
+ chunks.push(buffer.slice(0, 8));
77
+ let offset = 8;
78
+ while (offset < buffer.byteLength) {
79
+ const chunkLength = view.getUint32(offset, false);
80
+ const chunkType = String.fromCharCode(view.getUint8(offset + 4), view.getUint8(offset + 5), view.getUint8(offset + 6), view.getUint8(offset + 7));
81
+ if (chunkType === 'IEND') {
82
+ const textData = createPngTextData(metadata);
83
+ if (textData) {
84
+ const textChunk = createPngChunk('tEXt', textData);
85
+ chunks.push(textChunk);
86
+ }
87
+ }
88
+ chunks.push(buffer.slice(offset, offset + 12 + chunkLength));
89
+ offset += 12 + chunkLength;
90
+ }
91
+ const totalLength = chunks.reduce((acc, chunk) => acc + chunk.byteLength, 0);
92
+ const result = new Uint8Array(totalLength);
93
+ let resultOffset = 0;
94
+ for (const chunk of chunks) {
95
+ result.set(new Uint8Array(chunk), resultOffset);
96
+ resultOffset += chunk.byteLength;
97
+ }
98
+ return new Blob([result], { type: 'image/png' });
99
+ }
100
+ function createPngTextData(metadata) {
101
+ const custom = generateCustomMetadata(metadata);
102
+ const text = JSON.stringify(custom);
103
+ const encoder = new TextEncoder();
104
+ return encoder.encode(`Comment\0${text}`);
105
+ }
106
+ function createPngChunk(type, data) {
107
+ const length = data.byteLength;
108
+ const chunk = new ArrayBuffer(12 + length);
109
+ const view = new DataView(chunk);
110
+ view.setUint32(0, length, false);
111
+ const typeBytes = new TextEncoder().encode(type);
112
+ new Uint8Array(chunk).set(typeBytes, 4);
113
+ new Uint8Array(chunk).set(data, 8);
114
+ let crc = 0xffffffff;
115
+ for (let i = 4; i < 8 + length; i++) {
116
+ crc ^= new Uint8Array(chunk)[i];
117
+ for (let j = 0; j < 8; j++) {
118
+ crc = (crc >>> 1) ^ (crc & 1 ? 0xedb88320 : 0);
119
+ }
120
+ }
121
+ view.setUint32(8 + length, (crc ^ 0xffffffff) >>> 0, false);
122
+ return chunk;
123
+ }
124
+ export function removeMetadata(blob) {
125
+ return blob;
126
+ }
127
+ //# sourceMappingURL=metadata.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metadata.js","sourceRoot":"","sources":["../src/metadata.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ export interface ExportPreset {
2
+ name: string;
3
+ label: string;
4
+ width: number;
5
+ height: number;
6
+ category: string;
7
+ }
8
+ export declare const EXPORT_PRESETS: ExportPreset[];
9
+ export declare function getExportPreset(name: string): ExportPreset | undefined;
10
+ export declare function getPresetsByCategory(): Record<string, ExportPreset[]>;
11
+ //# sourceMappingURL=presets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"presets.d.ts","sourceRoot":"","sources":["../src/presets.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,eAAO,MAAM,cAAc,EAAE,YAAY,EAcxC,CAAC;AAEF,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAEtE;AAED,wBAAgB,oBAAoB,IAAI,MAAM,CAAC,MAAM,EAAE,YAAY,EAAE,CAAC,CAQrE"}
@@ -0,0 +1,28 @@
1
+ export const EXPORT_PRESETS = [
2
+ { name: 'instagram-post', label: 'Instagram Post', width: 1080, height: 1080, category: 'Instagram' },
3
+ { name: 'instagram-story', label: 'Instagram Story', width: 1080, height: 1920, category: 'Instagram' },
4
+ { name: 'instagram-reel', label: 'Instagram Reel', width: 1080, height: 1920, category: 'Instagram' },
5
+ { name: 'twitter-post', label: 'Twitter/X Post', width: 1200, height: 675, category: 'Twitter' },
6
+ { name: 'twitter-header', label: 'Twitter/X Header', width: 1500, height: 500, category: 'Twitter' },
7
+ { name: 'facebook-post', label: 'Facebook Post', width: 1200, height: 630, category: 'Facebook' },
8
+ { name: 'facebook-cover', label: 'Facebook Cover', width: 820, height: 312, category: 'Facebook' },
9
+ { name: 'youtube-thumbnail', label: 'YouTube Thumbnail', width: 1280, height: 720, category: 'YouTube' },
10
+ { name: 'youtube-banner', label: 'YouTube Banner', width: 2560, height: 1440, category: 'YouTube' },
11
+ { name: 'linkedin-post', label: 'LinkedIn Post', width: 1200, height: 627, category: 'LinkedIn' },
12
+ { name: 'linkedin-cover', label: 'LinkedIn Cover', width: 1584, height: 396, category: 'LinkedIn' },
13
+ { name: 'pinterest-pin', label: 'Pinterest Pin', width: 1000, height: 1500, category: 'Pinterest' },
14
+ { name: 'tiktok', label: 'TikTok', width: 1080, height: 1920, category: 'TikTok' },
15
+ ];
16
+ export function getExportPreset(name) {
17
+ return EXPORT_PRESETS.find((p) => p.name === name);
18
+ }
19
+ export function getPresetsByCategory() {
20
+ return EXPORT_PRESETS.reduce((acc, preset) => {
21
+ if (!acc[preset.category]) {
22
+ acc[preset.category] = [];
23
+ }
24
+ acc[preset.category].push(preset);
25
+ return acc;
26
+ }, {});
27
+ }
28
+ //# sourceMappingURL=presets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"presets.js","sourceRoot":"","sources":["../src/presets.ts"],"names":[],"mappings":"AAQA,MAAM,CAAC,MAAM,cAAc,GAAmB;IAC5C,EAAE,IAAI,EAAE,gBAAgB,EAAE,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE;IACrG,EAAE,IAAI,EAAE,iBAAiB,EAAE,KAAK,EAAE,iBAAiB,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE;IACvG,EAAE,IAAI,EAAE,gBAAgB,EAAE,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE;IACrG,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,SAAS,EAAE;IAChG,EAAE,IAAI,EAAE,gBAAgB,EAAE,KAAK,EAAE,kBAAkB,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,SAAS,EAAE;IACpG,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,UAAU,EAAE;IACjG,EAAE,IAAI,EAAE,gBAAgB,EAAE,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,UAAU,EAAE;IAClG,EAAE,IAAI,EAAE,mBAAmB,EAAE,KAAK,EAAE,mBAAmB,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,SAAS,EAAE;IACxG,EAAE,IAAI,EAAE,gBAAgB,EAAE,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE;IACnG,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,UAAU,EAAE;IACjG,EAAE,IAAI,EAAE,gBAAgB,EAAE,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,UAAU,EAAE;IACnG,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE;IACnG,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE;CACnF,CAAC;AAEF,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,oBAAoB;IAClC,OAAO,cAAc,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;QAC3C,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC1B,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;QAC5B,CAAC;QACD,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAClC,OAAO,GAAG,CAAC;IACb,CAAC,EAAE,EAAoC,CAAC,CAAC;AAC3C,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { ResizeOptions } from './types';
2
+ export declare function resizeImage(source: HTMLImageElement | HTMLCanvasElement | string | File, options: ResizeOptions): Promise<HTMLCanvasElement>;
3
+ export declare function resizeCanvas(canvas: HTMLCanvasElement, options: ResizeOptions): HTMLCanvasElement;
4
+ //# sourceMappingURL=resize.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resize.d.ts","sourceRoot":"","sources":["../src/resize.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAsCxC,wBAAsB,WAAW,CAC/B,MAAM,EAAE,gBAAgB,GAAG,iBAAiB,GAAG,MAAM,GAAG,IAAI,EAC5D,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,iBAAiB,CAAC,CA2B5B;AAED,wBAAgB,YAAY,CAC1B,MAAM,EAAE,iBAAiB,EACzB,OAAO,EAAE,aAAa,GACrB,iBAAiB,CAanB"}
package/dist/resize.js ADDED
@@ -0,0 +1,68 @@
1
+ import { loadImage } from './loader';
2
+ function calculateDimensions(originalWidth, originalHeight, options) {
3
+ let { width, height } = options;
4
+ const maintainAspectRatio = options.maintainAspectRatio ?? true;
5
+ if (!width && !height) {
6
+ return { width: originalWidth, height: originalHeight };
7
+ }
8
+ if (maintainAspectRatio) {
9
+ const aspectRatio = originalWidth / originalHeight;
10
+ if (width && !height) {
11
+ height = Math.round(width / aspectRatio);
12
+ }
13
+ else if (!width && height) {
14
+ width = Math.round(height * aspectRatio);
15
+ }
16
+ else {
17
+ const targetRatio = width / height;
18
+ if (targetRatio > aspectRatio) {
19
+ width = Math.round(height * aspectRatio);
20
+ }
21
+ else {
22
+ height = Math.round(width / aspectRatio);
23
+ }
24
+ }
25
+ }
26
+ else {
27
+ width = width ?? originalWidth;
28
+ height = height ?? originalHeight;
29
+ }
30
+ return { width: width, height: height };
31
+ }
32
+ export async function resizeImage(source, options) {
33
+ let img;
34
+ if (typeof source === 'string' || source instanceof File) {
35
+ img = await loadImage(source);
36
+ }
37
+ else if (source instanceof HTMLImageElement) {
38
+ img = source;
39
+ }
40
+ else {
41
+ img = new Image();
42
+ img.src = source.toDataURL();
43
+ await new Promise((resolve) => {
44
+ img.onload = () => resolve();
45
+ });
46
+ }
47
+ const { width, height } = calculateDimensions(img.width, img.height, options);
48
+ const canvas = document.createElement('canvas');
49
+ canvas.width = width;
50
+ canvas.height = height;
51
+ const ctx = canvas.getContext('2d');
52
+ ctx.imageSmoothingEnabled = true;
53
+ ctx.imageSmoothingQuality = 'high';
54
+ ctx.drawImage(img, 0, 0, width, height);
55
+ return canvas;
56
+ }
57
+ export function resizeCanvas(canvas, options) {
58
+ const { width, height } = calculateDimensions(canvas.width, canvas.height, options);
59
+ const resized = document.createElement('canvas');
60
+ resized.width = width;
61
+ resized.height = height;
62
+ const ctx = resized.getContext('2d');
63
+ ctx.imageSmoothingEnabled = true;
64
+ ctx.imageSmoothingQuality = 'high';
65
+ ctx.drawImage(canvas, 0, 0, width, height);
66
+ return resized;
67
+ }
68
+ //# sourceMappingURL=resize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resize.js","sourceRoot":"","sources":["../src/resize.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { RotateOptions, FlipOptions } from './types';
2
+ export declare function rotateImage(source: HTMLImageElement | HTMLCanvasElement | string | File, options: RotateOptions): Promise<HTMLCanvasElement>;
3
+ export declare function flipImage(source: HTMLImageElement | HTMLCanvasElement | string | File, options: FlipOptions): Promise<HTMLCanvasElement>;
4
+ export declare function rotateCanvas(canvas: HTMLCanvasElement, options: RotateOptions): HTMLCanvasElement;
5
+ export declare function flipCanvas(canvas: HTMLCanvasElement, options: FlipOptions): HTMLCanvasElement;
6
+ //# sourceMappingURL=transform.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transform.d.ts","sourceRoot":"","sources":["../src/transform.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAGrD,wBAAsB,WAAW,CAC/B,MAAM,EAAE,gBAAgB,GAAG,iBAAiB,GAAG,MAAM,GAAG,IAAI,EAC5D,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,iBAAiB,CAAC,CAkC5B;AAED,wBAAsB,SAAS,CAC7B,MAAM,EAAE,gBAAgB,GAAG,iBAAiB,GAAG,MAAM,GAAG,IAAI,EAC5D,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,iBAAiB,CAAC,CAiC5B;AAED,wBAAgB,YAAY,CAC1B,MAAM,EAAE,iBAAiB,EACzB,OAAO,EAAE,aAAa,GACrB,iBAAiB,CAuBnB;AAED,wBAAgB,UAAU,CACxB,MAAM,EAAE,iBAAiB,EACzB,OAAO,EAAE,WAAW,GACnB,iBAAiB,CAsBnB"}
@@ -0,0 +1,94 @@
1
+ import { imageToCanvas, loadImage } from './loader';
2
+ export async function rotateImage(source, options) {
3
+ let canvas;
4
+ if (typeof source === 'string' || source instanceof File) {
5
+ const img = await loadImage(source);
6
+ canvas = imageToCanvas(img);
7
+ }
8
+ else if (source instanceof HTMLImageElement) {
9
+ canvas = imageToCanvas(source);
10
+ }
11
+ else {
12
+ canvas = source;
13
+ }
14
+ const { degrees, backgroundColor = 'transparent' } = options;
15
+ const radians = (degrees * Math.PI) / 180;
16
+ const sin = Math.abs(Math.sin(radians));
17
+ const cos = Math.abs(Math.cos(radians));
18
+ const newWidth = Math.round(canvas.width * cos + canvas.height * sin);
19
+ const newHeight = Math.round(canvas.width * sin + canvas.height * cos);
20
+ const rotated = document.createElement('canvas');
21
+ rotated.width = newWidth;
22
+ rotated.height = newHeight;
23
+ const ctx = rotated.getContext('2d');
24
+ ctx.fillStyle = backgroundColor;
25
+ ctx.fillRect(0, 0, newWidth, newHeight);
26
+ ctx.translate(newWidth / 2, newHeight / 2);
27
+ ctx.rotate(radians);
28
+ ctx.drawImage(canvas, -canvas.width / 2, -canvas.height / 2);
29
+ return rotated;
30
+ }
31
+ export async function flipImage(source, options) {
32
+ let canvas;
33
+ if (typeof source === 'string' || source instanceof File) {
34
+ const img = await loadImage(source);
35
+ canvas = imageToCanvas(img);
36
+ }
37
+ else if (source instanceof HTMLImageElement) {
38
+ canvas = imageToCanvas(source);
39
+ }
40
+ else {
41
+ canvas = source;
42
+ }
43
+ const { horizontal = false, vertical = false } = options;
44
+ const flipped = document.createElement('canvas');
45
+ flipped.width = canvas.width;
46
+ flipped.height = canvas.height;
47
+ const ctx = flipped.getContext('2d');
48
+ if (horizontal) {
49
+ ctx.translate(canvas.width, 0);
50
+ ctx.scale(-1, 1);
51
+ }
52
+ if (vertical) {
53
+ ctx.translate(0, canvas.height);
54
+ ctx.scale(1, -1);
55
+ }
56
+ ctx.drawImage(canvas, 0, 0);
57
+ return flipped;
58
+ }
59
+ export function rotateCanvas(canvas, options) {
60
+ const { degrees, backgroundColor = 'transparent' } = options;
61
+ const radians = (degrees * Math.PI) / 180;
62
+ const sin = Math.abs(Math.sin(radians));
63
+ const cos = Math.abs(Math.cos(radians));
64
+ const newWidth = Math.round(canvas.width * cos + canvas.height * sin);
65
+ const newHeight = Math.round(canvas.width * sin + canvas.height * cos);
66
+ const rotated = document.createElement('canvas');
67
+ rotated.width = newWidth;
68
+ rotated.height = newHeight;
69
+ const ctx = rotated.getContext('2d');
70
+ ctx.fillStyle = backgroundColor;
71
+ ctx.fillRect(0, 0, newWidth, newHeight);
72
+ ctx.translate(newWidth / 2, newHeight / 2);
73
+ ctx.rotate(radians);
74
+ ctx.drawImage(canvas, -canvas.width / 2, -canvas.height / 2);
75
+ return rotated;
76
+ }
77
+ export function flipCanvas(canvas, options) {
78
+ const { horizontal = false, vertical = false } = options;
79
+ const flipped = document.createElement('canvas');
80
+ flipped.width = canvas.width;
81
+ flipped.height = canvas.height;
82
+ const ctx = flipped.getContext('2d');
83
+ if (horizontal) {
84
+ ctx.translate(canvas.width, 0);
85
+ ctx.scale(-1, 1);
86
+ }
87
+ if (vertical) {
88
+ ctx.translate(0, canvas.height);
89
+ ctx.scale(1, -1);
90
+ }
91
+ ctx.drawImage(canvas, 0, 0);
92
+ return flipped;
93
+ }
94
+ //# sourceMappingURL=transform.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transform.js","sourceRoot":"","sources":["../src/transform.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,153 @@
1
+ export declare const VERSION = "1.0.0";
2
+ export type ImageFormat = 'jpeg' | 'png' | 'webp' | 'avif' | 'gif' | 'bmp';
3
+ export interface ImageData {
4
+ width: number;
5
+ height: number;
6
+ data: Uint8ClampedArray;
7
+ }
8
+ export interface ImageInfo {
9
+ width: number;
10
+ height: number;
11
+ format: ImageFormat;
12
+ size: number;
13
+ metadata?: MetadataInfo;
14
+ }
15
+ export interface MetadataInfo {
16
+ exif?: Record<string, unknown>;
17
+ xmp?: Record<string, unknown>;
18
+ custom?: Record<string, unknown>;
19
+ }
20
+ export interface ExportOptions {
21
+ format: ImageFormat;
22
+ quality?: number;
23
+ width?: number;
24
+ height?: number;
25
+ maintainAspectRatio?: boolean;
26
+ metadata?: MetadataOptions;
27
+ onProgress?: ProgressCallback;
28
+ }
29
+ export interface MetadataOptions {
30
+ preserve?: boolean;
31
+ remove?: boolean;
32
+ custom?: Record<string, unknown>;
33
+ }
34
+ export interface ResizeOptions {
35
+ width?: number;
36
+ height?: number;
37
+ maintainAspectRatio?: boolean;
38
+ fit?: 'cover' | 'contain' | 'fill' | 'inside' | 'outside';
39
+ }
40
+ export interface CropOptions {
41
+ x: number;
42
+ y: number;
43
+ width: number;
44
+ height: number;
45
+ }
46
+ export interface RotateOptions {
47
+ degrees: number;
48
+ backgroundColor?: string;
49
+ }
50
+ export interface FlipOptions {
51
+ horizontal?: boolean;
52
+ vertical?: boolean;
53
+ }
54
+ export interface Adjustments {
55
+ brightness?: number;
56
+ contrast?: number;
57
+ saturation?: number;
58
+ exposure?: number;
59
+ highlights?: number;
60
+ shadows?: number;
61
+ temperature?: number;
62
+ tint?: number;
63
+ sharpness?: number;
64
+ blur?: number;
65
+ opacity?: number;
66
+ grayscale?: boolean;
67
+ sepia?: boolean;
68
+ }
69
+ export type FilterPreset = 'original' | 'vintage' | 'blackAndWhite' | 'warm' | 'cool' | 'cinematic' | 'fade' | 'dramatic' | 'soft' | 'highContrast';
70
+ export interface Layer {
71
+ id: string;
72
+ type: 'background' | 'image' | 'text' | 'shape';
73
+ name: string;
74
+ visible: boolean;
75
+ locked: boolean;
76
+ opacity: number;
77
+ x: number;
78
+ y: number;
79
+ width: number;
80
+ height: number;
81
+ rotation: number;
82
+ zIndex: number;
83
+ }
84
+ export interface TextLayer extends Layer {
85
+ type: 'text';
86
+ content: string;
87
+ fontFamily: string;
88
+ fontSize: number;
89
+ fontWeight: string;
90
+ color: string;
91
+ alignment: 'left' | 'center' | 'right';
92
+ letterSpacing: number;
93
+ lineHeight: number;
94
+ }
95
+ export interface ShapeLayer extends Layer {
96
+ type: 'shape';
97
+ shapeType: 'rectangle' | 'circle' | 'line';
98
+ fill: string;
99
+ stroke: string;
100
+ strokeWidth: number;
101
+ }
102
+ export interface ImageLayer extends Layer {
103
+ type: 'image';
104
+ imageElement: HTMLImageElement;
105
+ originalWidth: number;
106
+ originalHeight: number;
107
+ }
108
+ export interface EditorState {
109
+ width: number;
110
+ height: number;
111
+ layers: Layer[];
112
+ adjustments: Adjustments;
113
+ filter: FilterPreset;
114
+ history: EditorState[];
115
+ historyIndex: number;
116
+ }
117
+ export interface ProgressEvent {
118
+ phase: string;
119
+ percent: number;
120
+ message: string;
121
+ }
122
+ export type ProgressCallback = (event: ProgressEvent) => void;
123
+ export interface CompressionTargetOptions extends ExportOptions {
124
+ targetSize?: number;
125
+ tolerance?: number;
126
+ maxFileSize?: number;
127
+ maxDimension?: number;
128
+ }
129
+ export interface CompressionPreview {
130
+ originalWidth: number;
131
+ originalHeight: number;
132
+ originalSize: number;
133
+ estimatedSize: number;
134
+ estimatedSavingsPercent: number;
135
+ recommendedFormat: ImageFormat;
136
+ recommendedQuality: number;
137
+ }
138
+ export interface CompressionResult {
139
+ blob: Blob;
140
+ actualSize: number;
141
+ targetSize?: number;
142
+ withinTarget: boolean;
143
+ quality: number;
144
+ format: ImageFormat;
145
+ }
146
+ export type CompressionPreset = 'web' | 'email' | 'print' | 'thumbnail';
147
+ export interface ValidationResult {
148
+ valid: boolean;
149
+ size: number;
150
+ maxSize?: number;
151
+ message: string;
152
+ }
153
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export const VERSION = '1.0.0';
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC"}
@@ -0,0 +1,8 @@
1
+ export interface WorkerOperation {
2
+ type: string;
3
+ payload: unknown;
4
+ }
5
+ export declare function isWorkerSupported(): boolean;
6
+ export declare function processInWorker(operation: WorkerOperation): Promise<unknown>;
7
+ export declare function terminateWorker(): void;
8
+ //# sourceMappingURL=worker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../src/worker.ts"],"names":[],"mappings":"AAaA,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;CAClB;AA+GD,wBAAgB,iBAAiB,IAAI,OAAO,CAE3C;AAED,wBAAsB,eAAe,CAAC,SAAS,EAAE,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC,CAYlF;AAED,wBAAgB,eAAe,IAAI,IAAI,CAMtC"}