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
package/dist/crop.d.ts ADDED
@@ -0,0 +1,4 @@
1
+ import { CropOptions } from './types';
2
+ export declare function cropImage(source: HTMLImageElement | HTMLCanvasElement | string | File, options: CropOptions): Promise<HTMLCanvasElement>;
3
+ export declare function cropCanvas(canvas: HTMLCanvasElement, options: CropOptions): HTMLCanvasElement;
4
+ //# sourceMappingURL=crop.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crop.d.ts","sourceRoot":"","sources":["../src/crop.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAGtC,wBAAsB,SAAS,CAC7B,MAAM,EAAE,gBAAgB,GAAG,iBAAiB,GAAG,MAAM,GAAG,IAAI,EAC5D,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,iBAAiB,CAAC,CAiC5B;AAED,wBAAgB,UAAU,CACxB,MAAM,EAAE,iBAAiB,EACzB,OAAO,EAAE,WAAW,GACnB,iBAAiB,CAmBnB"}
package/dist/crop.js ADDED
@@ -0,0 +1,32 @@
1
+ import { loadImage } from './loader';
2
+ export async function cropImage(source, options) {
3
+ let img;
4
+ if (typeof source === 'string' || source instanceof File) {
5
+ img = await loadImage(source);
6
+ }
7
+ else if (source instanceof HTMLImageElement) {
8
+ img = source;
9
+ }
10
+ else {
11
+ img = new Image();
12
+ img.src = source.toDataURL();
13
+ await new Promise((resolve) => {
14
+ img.onload = () => resolve();
15
+ });
16
+ }
17
+ const canvas = document.createElement('canvas');
18
+ canvas.width = options.width;
19
+ canvas.height = options.height;
20
+ const ctx = canvas.getContext('2d');
21
+ ctx.drawImage(img, options.x, options.y, options.width, options.height, 0, 0, options.width, options.height);
22
+ return canvas;
23
+ }
24
+ export function cropCanvas(canvas, options) {
25
+ const cropped = document.createElement('canvas');
26
+ cropped.width = options.width;
27
+ cropped.height = options.height;
28
+ const ctx = cropped.getContext('2d');
29
+ ctx.drawImage(canvas, options.x, options.y, options.width, options.height, 0, 0, options.width, options.height);
30
+ return cropped;
31
+ }
32
+ //# sourceMappingURL=crop.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crop.js","sourceRoot":"","sources":["../src/crop.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAErC,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,MAA4D,EAC5D,OAAoB;IAEpB,IAAI,GAAqB,CAAC;IAE1B,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,YAAY,IAAI,EAAE,CAAC;QACzD,GAAG,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC,CAAC;IAChC,CAAC;SAAM,IAAI,MAAM,YAAY,gBAAgB,EAAE,CAAC;QAC9C,GAAG,GAAG,MAAM,CAAC;IACf,CAAC;SAAM,CAAC;QACN,GAAG,GAAG,IAAI,KAAK,EAAE,CAAC;QAClB,GAAG,CAAC,GAAG,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;QAC7B,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;YAClC,GAAG,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;QAC/B,CAAC,CAAC,CAAC;IACL,CAAC;IAED,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IAChD,MAAM,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAC7B,MAAM,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAE/B,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAE,CAAC;IACrC,GAAG,CAAC,SAAS,CACX,GAAG,EACH,OAAO,CAAC,CAAC,EACT,OAAO,CAAC,CAAC,EACT,OAAO,CAAC,KAAK,EACb,OAAO,CAAC,MAAM,EACd,CAAC,EACD,CAAC,EACD,OAAO,CAAC,KAAK,EACb,OAAO,CAAC,MAAM,CACf,CAAC;IAEF,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,UAAU,CACxB,MAAyB,EACzB,OAAoB;IAEpB,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IACjD,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAC9B,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAEhC,MAAM,GAAG,GAAG,OAAO,CAAC,UAAU,CAAC,IAAI,CAAE,CAAC;IACtC,GAAG,CAAC,SAAS,CACX,MAAM,EACN,OAAO,CAAC,CAAC,EACT,OAAO,CAAC,CAAC,EACT,OAAO,CAAC,KAAK,EACb,OAAO,CAAC,MAAM,EACd,CAAC,EACD,CAAC,EACD,OAAO,CAAC,KAAK,EACb,OAAO,CAAC,MAAM,CACf,CAAC;IAEF,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,58 @@
1
+ import type { ImageFormat, Adjustments, FilterPreset, CropOptions } from './types';
2
+ export interface DRPResult {
3
+ blob: Blob;
4
+ size: number;
5
+ format: string;
6
+ quality: number;
7
+ width: number;
8
+ height: number;
9
+ }
10
+ export interface DRPOptions {
11
+ format?: ImageFormat;
12
+ quality?: number;
13
+ targetSize?: string | number;
14
+ tolerance?: number;
15
+ width?: number;
16
+ height?: number;
17
+ maintainAspectRatio?: boolean;
18
+ crop?: {
19
+ x: number;
20
+ y: number;
21
+ width: number;
22
+ height: number;
23
+ } | CropOptions;
24
+ rotate?: number;
25
+ flip?: 'horizontal' | 'vertical' | 'both' | boolean;
26
+ filter?: FilterPreset;
27
+ adjustments?: Adjustments;
28
+ metadata?: {
29
+ preserve?: boolean;
30
+ remove?: boolean;
31
+ custom?: Record<string, unknown>;
32
+ };
33
+ onProgress?: (event: {
34
+ phase: string;
35
+ percent: number;
36
+ message: string;
37
+ }) => void;
38
+ }
39
+ declare function DRP(source: any, options?: DRPOptions): Promise<DRPResult>;
40
+ declare namespace DRP {
41
+ var process: (source: any, options?: DRPOptions) => Promise<DRPResult>;
42
+ var version: () => string;
43
+ var formats: () => ImageFormat[];
44
+ var filters: () => FilterPreset[];
45
+ var presets: () => import("./presets").ExportPreset[];
46
+ var editor: (source: any) => Promise<import("./editor").Editor>;
47
+ var batch: (files: File[], operation: any, onProgress?: any) => Promise<import("./batch").BatchResult[]>;
48
+ var validate: (file: File, maxSize?: number) => {
49
+ valid: boolean;
50
+ size: number;
51
+ maxSize?: number;
52
+ message: string;
53
+ };
54
+ var preview: (source: any, format?: ImageFormat) => Promise<import("./types").CompressionPreview>;
55
+ var readMetadata: (source: any) => Promise<import("./types").MetadataInfo>;
56
+ }
57
+ export { DRP };
58
+ //# sourceMappingURL=drp-class.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"drp-class.d.ts","sourceRoot":"","sources":["../src/drp-class.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,WAAW,EACX,WAAW,EACX,YAAY,EACZ,WAAW,EAEZ,MAAM,SAAS,CAAC;AAajB,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,IAAI,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,IAAI,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,WAAW,CAAC;IAC7E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,YAAY,GAAG,UAAU,GAAG,MAAM,GAAG,OAAO,CAAC;IACpD,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,QAAQ,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC;IACtF,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;CACnF;AA0MD,iBAAS,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC,CAElE;kBAFQ,GAAG;0BA/JmB,GAAG,YAAW,UAAU,KAAQ,OAAO,CAAC,SAAS,CAAC;;uBAqK/D,WAAW,EAAE;uBACb,YAAY,EAAE;;yBAKV,GAAG;uBACL,IAAI,EAAE,aAAa,GAAG,eAAe,GAAG;yBACtC,IAAI,YAAY,MAAM;;;;;;0BACrB,GAAG,WAAW,WAAW;+BACpB,GAAG;;AAE/B,OAAO,EAAE,GAAG,EAAE,CAAC"}
@@ -0,0 +1,191 @@
1
+ import { VERSION } from './types';
2
+ import { loadImage, imageToCanvas } from './loader';
3
+ import { cropImage } from './crop';
4
+ import { resizeImage } from './resize';
5
+ import { rotateImage, flipImage } from './transform';
6
+ import { applyAdjustments } from './adjustments';
7
+ import { applyFilter } from './filters';
8
+ import { compressToTargetSize, getCompressionPreview, validateFileSize } from './compress';
9
+ import { readMetadata, exportWithMetadata } from './metadata';
10
+ import { createEditor } from './editor';
11
+ import { EXPORT_PRESETS } from './presets';
12
+ import { batchProcess } from './batch';
13
+ function parseSize(input) {
14
+ if (typeof input === 'number')
15
+ return input;
16
+ const str = input.trim().toUpperCase();
17
+ const match = str.match(/^([\d.]+)\s*(B|KB|MB|GB)$/);
18
+ if (!match)
19
+ throw new Error(`Invalid size format: "${input}". Use "500KB", "2MB", etc.`);
20
+ const value = parseFloat(match[1]);
21
+ const unit = match[2];
22
+ switch (unit) {
23
+ case 'B': return value;
24
+ case 'KB': return value * 1024;
25
+ case 'MB': return value * 1024 * 1024;
26
+ case 'GB': return value * 1024 * 1024 * 1024;
27
+ default: return value;
28
+ }
29
+ }
30
+ function parseFlip(input) {
31
+ if (input === true)
32
+ return { horizontal: true };
33
+ if (input === false)
34
+ return {};
35
+ switch (input) {
36
+ case 'horizontal': return { horizontal: true };
37
+ case 'vertical': return { vertical: true };
38
+ case 'both': return { horizontal: true, vertical: true };
39
+ default: return {};
40
+ }
41
+ }
42
+ function normalizeCrop(crop) {
43
+ return {
44
+ x: crop.x,
45
+ y: crop.y,
46
+ width: 'width' in crop ? crop.width : crop.width,
47
+ height: 'height' in crop ? crop.height : crop.height,
48
+ };
49
+ }
50
+ async function process(source, options = {}) {
51
+ const { format = 'webp', quality = 80, targetSize, tolerance = 10, width, height, maintainAspectRatio = true, crop: cropOpts, rotate: rotateDeg, flip: flipOpts, filter: filterPreset, adjustments: adjOpts, metadata: metaOpts, onProgress, } = options;
52
+ onProgress?.({ phase: 'loading', percent: 0, message: 'Loading image...' });
53
+ let canvas;
54
+ if (source instanceof Blob && !(source instanceof File)) {
55
+ const url = URL.createObjectURL(source);
56
+ const img = await loadImage(url);
57
+ URL.revokeObjectURL(url);
58
+ canvas = imageToCanvas(img);
59
+ }
60
+ else if (typeof source === 'string' || source instanceof File) {
61
+ const img = await loadImage(source);
62
+ canvas = imageToCanvas(img);
63
+ }
64
+ else if (source instanceof HTMLImageElement) {
65
+ canvas = imageToCanvas(source);
66
+ }
67
+ else if (source instanceof HTMLCanvasElement) {
68
+ canvas = source;
69
+ }
70
+ else {
71
+ throw new Error('DRP: Invalid source. Provide a File, Blob, URL string, HTMLImageElement, or HTMLCanvasElement.');
72
+ }
73
+ const originalWidth = canvas.width;
74
+ const originalHeight = canvas.height;
75
+ void originalWidth;
76
+ void originalHeight;
77
+ let step = 0;
78
+ const totalSteps = [cropOpts, width || height, rotateDeg, flipOpts, adjOpts, filterPreset, true].filter(Boolean).length;
79
+ function progress(phase, msg) {
80
+ step++;
81
+ onProgress?.({ phase, percent: Math.round((step / totalSteps) * 80), message: msg });
82
+ }
83
+ if (cropOpts) {
84
+ progress('processing', 'Cropping...');
85
+ canvas = await cropImage(canvas, normalizeCrop(cropOpts));
86
+ }
87
+ if (width || height) {
88
+ progress('processing', 'Resizing...');
89
+ canvas = await resizeImage(canvas, {
90
+ width,
91
+ height,
92
+ maintainAspectRatio,
93
+ });
94
+ }
95
+ if (rotateDeg) {
96
+ progress('processing', 'Rotating...');
97
+ canvas = await rotateImage(canvas, { degrees: rotateDeg });
98
+ }
99
+ if (flipOpts) {
100
+ progress('processing', 'Flipping...');
101
+ canvas = await flipImage(canvas, parseFlip(flipOpts));
102
+ }
103
+ if (adjOpts) {
104
+ progress('processing', 'Adjusting...');
105
+ canvas = applyAdjustments(canvas, adjOpts);
106
+ }
107
+ if (filterPreset && filterPreset !== 'original') {
108
+ progress('processing', 'Applying filter...');
109
+ canvas = applyFilter(canvas, filterPreset);
110
+ }
111
+ onProgress?.({ phase: 'encoding', percent: 80, message: 'Encoding...' });
112
+ let blob;
113
+ let actualQuality = quality;
114
+ let actualFormat = format;
115
+ if (targetSize) {
116
+ const targetBytes = parseSize(targetSize);
117
+ const result = await compressToTargetSize(canvas, {
118
+ format,
119
+ quality,
120
+ targetSize: targetBytes,
121
+ tolerance,
122
+ onProgress: onProgress
123
+ ? (e) => onProgress({ ...e, percent: 80 + Math.round(e.percent * 0.2) })
124
+ : undefined,
125
+ });
126
+ blob = result.blob;
127
+ actualQuality = result.quality;
128
+ actualFormat = result.format;
129
+ }
130
+ else {
131
+ const mimeType = getMimeTypeForFormat(format);
132
+ const q = quality / 100;
133
+ let encoded;
134
+ if (format === 'png' || format === 'bmp' || format === 'gif') {
135
+ encoded = await canvasToBlob(canvas, mimeType);
136
+ }
137
+ else {
138
+ encoded = await canvasToBlob(canvas, mimeType, q);
139
+ }
140
+ if (!encoded) {
141
+ throw new Error(`DRP: Failed to encode to ${format}`);
142
+ }
143
+ blob = encoded;
144
+ }
145
+ if (metaOpts && (metaOpts.preserve || metaOpts.custom)) {
146
+ blob = await exportWithMetadata(blob, actualFormat, metaOpts);
147
+ }
148
+ onProgress?.({ phase: 'complete', percent: 100, message: 'Done' });
149
+ return {
150
+ blob,
151
+ size: blob.size,
152
+ format: actualFormat,
153
+ quality: actualQuality,
154
+ width: canvas.width,
155
+ height: canvas.height,
156
+ };
157
+ }
158
+ function getMimeTypeForFormat(format) {
159
+ const map = {
160
+ jpeg: 'image/jpeg',
161
+ png: 'image/png',
162
+ webp: 'image/webp',
163
+ avif: 'image/avif',
164
+ gif: 'image/gif',
165
+ bmp: 'image/bmp',
166
+ };
167
+ return map[format] || 'image/webp';
168
+ }
169
+ function canvasToBlob(canvas, mimeType, quality) {
170
+ return new Promise((resolve) => {
171
+ canvas.toBlob(resolve, mimeType, quality);
172
+ });
173
+ }
174
+ function DRP(source, options) {
175
+ return process(source, options);
176
+ }
177
+ DRP.process = process;
178
+ DRP.version = () => VERSION;
179
+ DRP.formats = () => ['jpeg', 'png', 'webp', 'avif', 'gif', 'bmp'];
180
+ DRP.filters = () => [
181
+ 'original', 'vintage', 'blackAndWhite', 'warm', 'cool',
182
+ 'cinematic', 'fade', 'dramatic', 'soft', 'highContrast',
183
+ ];
184
+ DRP.presets = () => EXPORT_PRESETS;
185
+ DRP.editor = (source) => createEditor(source);
186
+ DRP.batch = (files, operation, onProgress) => batchProcess(files, operation, onProgress);
187
+ DRP.validate = (file, maxSize) => validateFileSize(file, maxSize);
188
+ DRP.preview = (source, format) => getCompressionPreview(source, format);
189
+ DRP.readMetadata = (source) => readMetadata(source);
190
+ export { DRP };
191
+ //# sourceMappingURL=drp-class.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"drp-class.js","sourceRoot":"","sources":["../src/drp-class.ts"],"names":[],"mappings":"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"}
package/dist/drp.d.ts ADDED
@@ -0,0 +1,14 @@
1
+ import { ImageFormat } from './types';
2
+ export declare const DRP_NAME = "Digital Resolution Pro";
3
+ export declare const DRP_VERSION = "1.0.0";
4
+ export declare const DRP_TAG = "drp";
5
+ export declare function getDRPVersion(): string;
6
+ export declare function getDRPInfo(): {
7
+ name: string;
8
+ version: string;
9
+ tag: string;
10
+ };
11
+ export declare function getDRPFilename(originalName: string, format?: ImageFormat): string;
12
+ export declare function isDRPFile(filename: string): boolean;
13
+ export declare function stripDRPTag(filename: string): string;
14
+ //# sourceMappingURL=drp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"drp.d.ts","sourceRoot":"","sources":["../src/drp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAGtC,eAAO,MAAM,QAAQ,2BAA2B,CAAC;AACjD,eAAO,MAAM,WAAW,UAAU,CAAC;AACnC,eAAO,MAAM,OAAO,QAAQ,CAAC;AAE7B,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED,wBAAgB,UAAU,IAAI;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAE3E;AAED,wBAAgB,cAAc,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,MAAM,CAIjF;AAED,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAGnD;AAED,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEpD"}
package/dist/drp.js ADDED
@@ -0,0 +1,23 @@
1
+ import { getExtension } from './convert';
2
+ export const DRP_NAME = 'Digital Resolution Pro';
3
+ export const DRP_VERSION = '1.0.0';
4
+ export const DRP_TAG = 'drp';
5
+ export function getDRPVersion() {
6
+ return DRP_VERSION;
7
+ }
8
+ export function getDRPInfo() {
9
+ return { name: DRP_NAME, version: DRP_VERSION, tag: DRP_TAG };
10
+ }
11
+ export function getDRPFilename(originalName, format) {
12
+ const baseName = originalName.replace(/\.[^/.]+$/, '');
13
+ const ext = format ? getExtension(format) : '.' + originalName.split('.').pop();
14
+ return `${baseName}-${DRP_TAG}${ext}`;
15
+ }
16
+ export function isDRPFile(filename) {
17
+ const pattern = new RegExp(`-${DRP_TAG}\\.[^.]+$`);
18
+ return pattern.test(filename);
19
+ }
20
+ export function stripDRPTag(filename) {
21
+ return filename.replace(new RegExp(`-${DRP_TAG}(\\.[^.]+)$`), '$1');
22
+ }
23
+ //# sourceMappingURL=drp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"drp.js","sourceRoot":"","sources":["../src/drp.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAEzC,MAAM,CAAC,MAAM,QAAQ,GAAG,wBAAwB,CAAC;AACjD,MAAM,CAAC,MAAM,WAAW,GAAG,OAAO,CAAC;AACnC,MAAM,CAAC,MAAM,OAAO,GAAG,KAAK,CAAC;AAE7B,MAAM,UAAU,aAAa;IAC3B,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC;AAChE,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,YAAoB,EAAE,MAAoB;IACvE,MAAM,QAAQ,GAAG,YAAY,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IACvD,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;IAChF,OAAO,GAAG,QAAQ,IAAI,OAAO,GAAG,GAAG,EAAE,CAAC;AACxC,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,QAAgB;IACxC,MAAM,OAAO,GAAG,IAAI,MAAM,CAAC,IAAI,OAAO,WAAW,CAAC,CAAC;IACnD,OAAO,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,QAAgB;IAC1C,OAAO,QAAQ,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,IAAI,OAAO,aAAa,CAAC,EAAE,IAAI,CAAC,CAAC;AACtE,CAAC"}
@@ -0,0 +1,24 @@
1
+ import { CropOptions, ResizeOptions, RotateOptions, FlipOptions, Adjustments, FilterPreset, ExportOptions, CompressionTargetOptions, Layer } from './types';
2
+ export interface Editor {
3
+ getWidth(): number;
4
+ getHeight(): number;
5
+ getCanvas(): HTMLCanvasElement;
6
+ crop(options: CropOptions): void;
7
+ resize(options: ResizeOptions): void;
8
+ rotate(options: RotateOptions): void;
9
+ flip(options: FlipOptions): void;
10
+ adjust(adjustments: Adjustments): void;
11
+ applyFilter(filter: FilterPreset): void;
12
+ addLayer(layer: Layer): void;
13
+ removeLayer(layerId: string): void;
14
+ getLayers(): Layer[];
15
+ export(options: ExportOptions): Promise<Blob>;
16
+ compress(options: CompressionTargetOptions): Promise<Blob>;
17
+ undo(): void;
18
+ redo(): void;
19
+ canUndo(): boolean;
20
+ canRedo(): boolean;
21
+ reset(): void;
22
+ }
23
+ export declare function createEditor(source: HTMLImageElement | string | File): Promise<Editor>;
24
+ //# sourceMappingURL=editor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"editor.d.ts","sourceRoot":"","sources":["../src/editor.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,WAAW,EACX,aAAa,EACb,aAAa,EACb,WAAW,EACX,WAAW,EACX,YAAY,EACZ,aAAa,EACb,wBAAwB,EACxB,KAAK,EACN,MAAM,SAAS,CAAC;AAYjB,MAAM,WAAW,MAAM;IACrB,QAAQ,IAAI,MAAM,CAAC;IACnB,SAAS,IAAI,MAAM,CAAC;IACpB,SAAS,IAAI,iBAAiB,CAAC;IAC/B,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI,CAAC;IACjC,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI,CAAC;IACrC,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI,CAAC;IACrC,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI,CAAC;IACjC,MAAM,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI,CAAC;IACvC,WAAW,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CAAC;IACxC,QAAQ,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IAC7B,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,SAAS,IAAI,KAAK,EAAE,CAAC;IACrB,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9C,QAAQ,CAAC,OAAO,EAAE,wBAAwB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3D,IAAI,IAAI,IAAI,CAAC;IACb,IAAI,IAAI,IAAI,CAAC;IACb,OAAO,IAAI,OAAO,CAAC;IACnB,OAAO,IAAI,OAAO,CAAC;IACnB,KAAK,IAAI,IAAI,CAAC;CACf;AAED,wBAAsB,YAAY,CAChC,MAAM,EAAE,gBAAgB,GAAG,MAAM,GAAG,IAAI,GACvC,OAAO,CAAC,MAAM,CAAC,CA6KjB"}
package/dist/editor.js ADDED
@@ -0,0 +1,153 @@
1
+ import { loadImage, imageToCanvas } from './loader';
2
+ import { cropCanvas } from './crop';
3
+ import { resizeCanvas } from './resize';
4
+ import { rotateCanvas, flipCanvas } from './transform';
5
+ import { applyAdjustments } from './adjustments';
6
+ import { applyFilter } from './filters';
7
+ import { convertImage } from './convert';
8
+ import { renderLayersToCanvas, getMaxZIndex } from './layers';
9
+ import { exportWithMetadata } from './metadata';
10
+ import { compressToTargetSize } from './compress';
11
+ export async function createEditor(source) {
12
+ let img;
13
+ if (typeof source === 'string' || source instanceof File) {
14
+ img = await loadImage(source);
15
+ }
16
+ else {
17
+ img = source;
18
+ }
19
+ const originalCanvas = imageToCanvas(img);
20
+ let currentCanvas = originalCanvas;
21
+ const state = {
22
+ width: originalCanvas.width,
23
+ height: originalCanvas.height,
24
+ layers: [],
25
+ adjustments: {},
26
+ filter: 'original',
27
+ history: [],
28
+ historyIndex: -1,
29
+ };
30
+ function saveState() {
31
+ state.history = state.history.slice(0, state.historyIndex + 1);
32
+ state.history.push({
33
+ ...state,
34
+ layers: [...state.layers],
35
+ adjustments: { ...state.adjustments },
36
+ });
37
+ state.historyIndex = state.history.length - 1;
38
+ }
39
+ function applyAllTransformations() {
40
+ let canvas = originalCanvas;
41
+ canvas = applyAdjustments(canvas, state.adjustments);
42
+ canvas = applyFilter(canvas, state.filter);
43
+ if (state.layers.length > 0) {
44
+ const layersCanvas = renderLayersToCanvas(state.layers, state.width, state.height);
45
+ const ctx = canvas.getContext('2d');
46
+ ctx.drawImage(layersCanvas, 0, 0);
47
+ }
48
+ return canvas;
49
+ }
50
+ saveState();
51
+ return {
52
+ getWidth: () => currentCanvas.width,
53
+ getHeight: () => currentCanvas.height,
54
+ getCanvas: () => currentCanvas,
55
+ crop: (options) => {
56
+ currentCanvas = cropCanvas(currentCanvas, options);
57
+ state.width = currentCanvas.width;
58
+ state.height = currentCanvas.height;
59
+ saveState();
60
+ },
61
+ resize: (options) => {
62
+ currentCanvas = resizeCanvas(currentCanvas, options);
63
+ state.width = currentCanvas.width;
64
+ state.height = currentCanvas.height;
65
+ saveState();
66
+ },
67
+ rotate: (options) => {
68
+ currentCanvas = rotateCanvas(currentCanvas, options);
69
+ state.width = currentCanvas.width;
70
+ state.height = currentCanvas.height;
71
+ saveState();
72
+ },
73
+ flip: (options) => {
74
+ currentCanvas = flipCanvas(currentCanvas, options);
75
+ saveState();
76
+ },
77
+ adjust: (adjustments) => {
78
+ state.adjustments = { ...state.adjustments, ...adjustments };
79
+ currentCanvas = applyAllTransformations();
80
+ saveState();
81
+ },
82
+ applyFilter: (filter) => {
83
+ state.filter = filter;
84
+ currentCanvas = applyAllTransformations();
85
+ saveState();
86
+ },
87
+ addLayer: (layer) => {
88
+ const maxZ = getMaxZIndex(state.layers);
89
+ layer.zIndex = maxZ + 1;
90
+ state.layers.push(layer);
91
+ currentCanvas = applyAllTransformations();
92
+ saveState();
93
+ },
94
+ removeLayer: (layerId) => {
95
+ state.layers = state.layers.filter((l) => l.id !== layerId);
96
+ currentCanvas = applyAllTransformations();
97
+ saveState();
98
+ },
99
+ getLayers: () => [...state.layers],
100
+ export: async (options) => {
101
+ let blob = await convertImage(currentCanvas, options);
102
+ if (options.metadata) {
103
+ blob = await exportWithMetadata(blob, options.format, options.metadata);
104
+ }
105
+ return blob;
106
+ },
107
+ compress: async (options) => {
108
+ const result = await compressToTargetSize(currentCanvas, options);
109
+ if (options.metadata) {
110
+ return exportWithMetadata(result.blob, options.format, options.metadata);
111
+ }
112
+ return result.blob;
113
+ },
114
+ undo: () => {
115
+ if (state.historyIndex > 0) {
116
+ state.historyIndex--;
117
+ const prev = state.history[state.historyIndex];
118
+ state.width = prev.width;
119
+ state.height = prev.height;
120
+ state.layers = [...prev.layers];
121
+ state.adjustments = { ...prev.adjustments };
122
+ state.filter = prev.filter;
123
+ currentCanvas = applyAllTransformations();
124
+ }
125
+ },
126
+ redo: () => {
127
+ if (state.historyIndex < state.history.length - 1) {
128
+ state.historyIndex++;
129
+ const next = state.history[state.historyIndex];
130
+ state.width = next.width;
131
+ state.height = next.height;
132
+ state.layers = [...next.layers];
133
+ state.adjustments = { ...next.adjustments };
134
+ state.filter = next.filter;
135
+ currentCanvas = applyAllTransformations();
136
+ }
137
+ },
138
+ canUndo: () => state.historyIndex > 0,
139
+ canRedo: () => state.historyIndex < state.history.length - 1,
140
+ reset: () => {
141
+ currentCanvas = originalCanvas;
142
+ state.width = originalCanvas.width;
143
+ state.height = originalCanvas.height;
144
+ state.layers = [];
145
+ state.adjustments = {};
146
+ state.filter = 'original';
147
+ state.history = [];
148
+ state.historyIndex = -1;
149
+ saveState();
150
+ },
151
+ };
152
+ }
153
+ //# sourceMappingURL=editor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"editor.js","sourceRoot":"","sources":["../src/editor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import { FilterPreset } from './types';
2
+ interface FilterConfig {
3
+ brightness: number;
4
+ contrast: number;
5
+ saturation: number;
6
+ temperature: number;
7
+ tint: number;
8
+ grayscale: boolean;
9
+ sepia: boolean;
10
+ hueRotate: number;
11
+ blur: number;
12
+ opacity: number;
13
+ }
14
+ export declare function getFilterConfig(preset: FilterPreset): FilterConfig;
15
+ export declare function applyFilter(canvas: HTMLCanvasElement, preset: FilterPreset): HTMLCanvasElement;
16
+ export declare const AVAILABLE_FILTERS: FilterPreset[];
17
+ export declare function getFilterName(preset: FilterPreset): string;
18
+ export {};
19
+ //# sourceMappingURL=filters.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filters.d.ts","sourceRoot":"","sources":["../src/filters.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,UAAU,YAAY;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,OAAO,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AA6HD,wBAAgB,eAAe,CAAC,MAAM,EAAE,YAAY,GAAG,YAAY,CAElE;AAED,wBAAgB,WAAW,CACzB,MAAM,EAAE,iBAAiB,EACzB,MAAM,EAAE,YAAY,GACnB,iBAAiB,CA6DnB;AAED,eAAO,MAAM,iBAAiB,EAAE,YAAY,EAW3C,CAAC;AAEF,wBAAgB,aAAa,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAc1D"}