@pixzle/node 0.1.6 → 0.1.8

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.
@@ -2,12 +2,9 @@ import { type FragmentationConfig, type FragmentationResult } from "@pixzle/core
2
2
  export declare class ImageFragmenter {
3
3
  private config;
4
4
  constructor(config: FragmentationConfig);
5
- private _initializeConfig;
5
+ private initializeConfig;
6
6
  fragmentImages(paths: string[]): Promise<FragmentationResult>;
7
- private _createImages;
8
- private _createManifest;
9
- private _prepareData;
10
- private _processImages;
11
- private _processImage;
12
- private _createImage;
7
+ private createManifest;
8
+ private loadSourceImage;
9
+ private createImageInfo;
13
10
  }
@@ -3,16 +3,16 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ImageFragmenter = void 0;
4
4
  const core_1 = require("@pixzle/core");
5
5
  const seeded_shuffle_1 = require("@tuki0918/seeded-shuffle");
6
- const block_1 = require("./block");
7
6
  const constants_1 = require("./constants");
8
7
  const file_1 = require("./file");
8
+ const image_buffer_1 = require("./image-buffer");
9
9
  const utils_1 = require("./utils");
10
10
  class ImageFragmenter {
11
11
  config;
12
12
  constructor(config) {
13
- this.config = this._initializeConfig(config);
13
+ this.config = this.initializeConfig(config);
14
14
  }
15
- _initializeConfig(config) {
15
+ initializeConfig(config) {
16
16
  return {
17
17
  blockSize: config.blockSize ?? core_1.DEFAULT_FRAGMENTATION_CONFIG.BLOCK_SIZE,
18
18
  prefix: config.prefix ?? core_1.DEFAULT_FRAGMENTATION_CONFIG.PREFIX,
@@ -23,27 +23,18 @@ class ImageFragmenter {
23
23
  };
24
24
  }
25
25
  async fragmentImages(paths) {
26
- const { manifest, blocks, blockCountsForCrossImages, blockCountsPerImage } = await this._prepareData(paths);
27
- const shuffled = this.config.crossImageShuffle
28
- ? (0, seeded_shuffle_1.shuffle)(blocks, manifest.config.seed)
29
- : (0, block_1.blocksPerImage)(blocks, blockCountsPerImage, manifest.config.seed, seeded_shuffle_1.shuffle);
30
- const blockCounts = this.config.crossImageShuffle
31
- ? blockCountsForCrossImages
32
- : blockCountsPerImage;
33
- const fragmentedImages = await this._createImages(shuffled, blockCounts, manifest);
26
+ const manifestId = (0, utils_1.generateManifestId)();
27
+ const sources = await Promise.all(paths.map((path) => this.loadSourceImage(path)));
28
+ const imageInfos = paths.map((path, index) => this.createImageInfo(path, sources[index].width, sources[index].height));
29
+ (0, core_1.validateFileNames)(imageInfos, this.config.preserveName);
30
+ const fragmentedBuffers = (0, core_1.fragmentImageBuffers)(sources, this.config);
31
+ const fragmentedImages = await Promise.all(fragmentedBuffers.map((fragment) => (0, image_buffer_1.createPngFromImageBuffer)(Buffer.from(fragment.buffer), fragment.width, fragment.height)));
34
32
  return {
35
- manifest,
33
+ manifest: this.createManifest(manifestId, imageInfos),
36
34
  fragmentedImages,
37
35
  };
38
36
  }
39
- async _createImages(blocks, blockCounts, manifest) {
40
- return await Promise.all(manifest.images.map(async (_, index) => {
41
- const { start, end } = (0, core_1.calculateBlockRange)(blockCounts, index);
42
- const imageBlocks = blocks.slice(start, end);
43
- return await this._createImage(imageBlocks, manifest.config.blockSize);
44
- }));
45
- }
46
- _createManifest(manifestId, imageInfos) {
37
+ createManifest(manifestId, imageInfos) {
47
38
  return {
48
39
  id: manifestId,
49
40
  version: constants_1.VERSION,
@@ -52,40 +43,23 @@ class ImageFragmenter {
52
43
  images: imageInfos,
53
44
  };
54
45
  }
55
- async _prepareData(paths) {
56
- const manifestId = (0, utils_1.generateManifestId)();
57
- const { imageInfos, blocks } = await this._processImages(paths);
58
- (0, core_1.validateFileNames)(imageInfos, this.config.preserveName);
59
- const manifest = this._createManifest(manifestId, imageInfos);
60
- const blockCountsForCrossImages = (0, core_1.calculateBlockCountsForCrossImages)(blocks.length, paths.length);
61
- // Calculate actual block counts per image for per-image shuffle
62
- const blockCountsPerImage = (0, core_1.calculateBlockCountsPerImage)(imageInfos, this.config.blockSize);
63
- return { manifest, blocks, blockCountsForCrossImages, blockCountsPerImage };
64
- }
65
- async _processImages(paths) {
66
- const results = await Promise.all(paths.map((path) => this._processImage(path)));
67
- const imageInfos = results.map((r) => r.imageInfo);
68
- const blocks = results.flatMap((r) => r.blocks);
69
- return { imageInfos, blocks };
70
- }
71
- async _processImage(path) {
46
+ async loadSourceImage(path) {
72
47
  const buffer = await (0, file_1.loadBuffer)(path);
73
- const { blocks, width, height } = await (0, block_1.imageToBlocks)(buffer, this.config.blockSize);
74
- const imageInfo = {
48
+ const { imageBuffer, width, height } = await (0, image_buffer_1.loadImageBuffer)(buffer);
49
+ return {
50
+ buffer: imageBuffer,
51
+ width,
52
+ height,
53
+ };
54
+ }
55
+ createImageInfo(path, width, height) {
56
+ return {
75
57
  w: width,
76
58
  h: height,
77
59
  name: this.config.preserveName
78
60
  ? (0, core_1.encodeFileName)((0, file_1.fileNameWithoutExtension)(path))
79
61
  : undefined,
80
62
  };
81
- return { imageInfo, blocks };
82
- }
83
- async _createImage(blocks, blockSize) {
84
- const blockCount = blocks.length;
85
- const blocksPerRow = Math.ceil(Math.sqrt(blockCount));
86
- const imageWidth = blocksPerRow * blockSize;
87
- const imageHeight = Math.ceil(blockCount / blocksPerRow) * blockSize;
88
- return await (0, block_1.blocksToPngImage)(blocks, imageWidth, imageHeight, blockSize);
89
63
  }
90
64
  }
91
65
  exports.ImageFragmenter = ImageFragmenter;
@@ -1 +1 @@
1
- {"version":3,"file":"fragmenter.js","sourceRoot":"","sources":["../src/fragmenter.ts"],"names":[],"mappings":";;;AAAA,uCAWsB;AACtB,6DAAiE;AACjE,mCAA0E;AAC1E,2CAAsC;AACtC,iCAA8D;AAC9D,mCAA6C;AAE7C,MAAa,eAAe;IAClB,MAAM,CAAgC;IAE9C,YAAY,MAA2B;QACrC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAC/C,CAAC;IAEO,iBAAiB,CACvB,MAA2B;QAE3B,OAAO;YACL,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,mCAA4B,CAAC,UAAU;YACtE,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,mCAA4B,CAAC,MAAM;YAC5D,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,6BAAY,CAAC,YAAY,EAAE;YAChD,YAAY,EACV,MAAM,CAAC,YAAY,IAAI,mCAA4B,CAAC,aAAa;YACnE,iBAAiB,EACf,MAAM,CAAC,iBAAiB;gBACxB,mCAA4B,CAAC,mBAAmB;SACnD,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,KAAe;QAClC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,yBAAyB,EAAE,mBAAmB,EAAE,GACxE,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QAEjC,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,iBAAiB;YAC5C,CAAC,CAAC,IAAA,wBAAO,EAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC;YACvC,CAAC,CAAC,IAAA,sBAAc,EACZ,MAAM,EACN,mBAAmB,EACnB,QAAQ,CAAC,MAAM,CAAC,IAAI,EACpB,wBAAO,CACR,CAAC;QAEN,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,iBAAiB;YAC/C,CAAC,CAAC,yBAAyB;YAC3B,CAAC,CAAC,mBAAmB,CAAC;QAExB,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,aAAa,CAC/C,QAAQ,EACR,WAAW,EACX,QAAQ,CACT,CAAC;QAEF,OAAO;YACL,QAAQ;YACR,gBAAgB;SACjB,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,aAAa,CACzB,MAAgB,EAChB,WAAqB,EACrB,QAAsB;QAEtB,OAAO,MAAM,OAAO,CAAC,GAAG,CACtB,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE;YACrC,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,IAAA,0BAAmB,EAAC,WAAW,EAAE,KAAK,CAAC,CAAC;YAC/D,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YAC7C,OAAO,MAAM,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACzE,CAAC,CAAC,CACH,CAAC;IACJ,CAAC;IAEO,eAAe,CACrB,UAAkB,EAClB,UAAuB;QAEvB,OAAO;YACL,EAAE,EAAE,UAAU;YACd,OAAO,EAAE,mBAAO;YAChB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,MAAM,EAAE,UAAU;SACnB,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,YAAY,CAAC,KAAe;QAMxC,MAAM,UAAU,GAAG,IAAA,0BAAkB,GAAE,CAAC;QAExC,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QAEhE,IAAA,wBAAiB,EAAC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QAExD,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QAE9D,MAAM,yBAAyB,GAAG,IAAA,yCAAkC,EAClE,MAAM,CAAC,MAAM,EACb,KAAK,CAAC,MAAM,CACb,CAAC;QAEF,gEAAgE;QAChE,MAAM,mBAAmB,GAAG,IAAA,mCAA4B,EACtD,UAAU,EACV,IAAI,CAAC,MAAM,CAAC,SAAS,CACtB,CAAC;QAEF,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,yBAAyB,EAAE,mBAAmB,EAAE,CAAC;IAC9E,CAAC;IAEO,KAAK,CAAC,cAAc,CAAC,KAAe;QAI1C,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAC/B,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAC9C,CAAC;QAEF,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QACnD,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QAEhD,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC;IAChC,CAAC;IAEO,KAAK,CAAC,aAAa,CAAC,IAAY;QAItC,MAAM,MAAM,GAAG,MAAM,IAAA,iBAAU,EAAC,IAAI,CAAC,CAAC;QAEtC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,IAAA,qBAAa,EACnD,MAAM,EACN,IAAI,CAAC,MAAM,CAAC,SAAS,CACtB,CAAC;QAEF,MAAM,SAAS,GAAc;YAC3B,CAAC,EAAE,KAAK;YACR,CAAC,EAAE,MAAM;YACT,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,YAAY;gBAC5B,CAAC,CAAC,IAAA,qBAAc,EAAC,IAAA,+BAAwB,EAAC,IAAI,CAAC,CAAC;gBAChD,CAAC,CAAC,SAAS;SACd,CAAC;QAEF,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC;IAC/B,CAAC;IAEO,KAAK,CAAC,YAAY,CACxB,MAAgB,EAChB,SAAiB;QAEjB,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC;QACjC,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;QACtD,MAAM,UAAU,GAAG,YAAY,GAAG,SAAS,CAAC;QAC5C,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,YAAY,CAAC,GAAG,SAAS,CAAC;QAErE,OAAO,MAAM,IAAA,wBAAgB,EAAC,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;IAC5E,CAAC;CACF;AAzJD,0CAyJC"}
1
+ {"version":3,"file":"fragmenter.js","sourceRoot":"","sources":["../src/fragmenter.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,11 @@ interface ImageToBlocksResult {
6
6
  blockCountX: number;
7
7
  blockCountY: number;
8
8
  }
9
+ interface ImageBufferResult {
10
+ imageBuffer: Buffer;
11
+ width: number;
12
+ height: number;
13
+ }
9
14
  /**
10
15
  * Split an RGBA image buffer into an array of blocks (Node.js Buffer wrapper)
11
16
  * @param buffer Source image buffer (RGBA format)
@@ -31,6 +36,12 @@ export declare function blocksToImageBuffer(blocks: Buffer[], width: number, hei
31
36
  * @returns Promise resolving to block data and image metadata
32
37
  */
33
38
  export declare function imageToBlocks(input: string | Buffer, blockSize: number): Promise<ImageToBlocksResult>;
39
+ /**
40
+ * Load an image and return its raw RGBA buffer and dimensions
41
+ * @param input Path to the image file or Buffer containing image data
42
+ * @returns Promise resolving to image buffer and dimensions
43
+ */
44
+ export declare function loadImageBuffer(input: string | Buffer): Promise<ImageBufferResult>;
34
45
  /**
35
46
  * Reconstruct a PNG image from blocks
36
47
  * @param blocks Array of block buffers
@@ -41,7 +52,7 @@ export declare function imageToBlocks(input: string | Buffer, blockSize: number)
41
52
  */
42
53
  export declare function blocksToPngImage(blocks: Buffer[], width: number, height: number, blockSize: number): Promise<Buffer>;
43
54
  /**
44
- * Extract raw RGBA image buffer from a PNG buffer using Jimp
55
+ * Extract raw RGBA image buffer from a PNG buffer
45
56
  * @param pngBuffer PNG image buffer
46
57
  * @returns Promise resolving to image buffer and image dimensions
47
58
  */
@@ -51,7 +62,7 @@ export declare function extractImageBufferFromPng(pngBuffer: Buffer): Promise<{
51
62
  height: number;
52
63
  }>;
53
64
  /**
54
- * Create a PNG buffer from raw RGBA image buffer using Jimp
65
+ * Create a PNG buffer from raw RGBA image buffer
55
66
  * @param imageBuffer Raw RGBA image buffer
56
67
  * @param width Image width in pixels
57
68
  * @param height Image height in pixels
@@ -3,12 +3,13 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.splitImageToBlocks = splitImageToBlocks;
4
4
  exports.blocksToImageBuffer = blocksToImageBuffer;
5
5
  exports.imageToBlocks = imageToBlocks;
6
+ exports.loadImageBuffer = loadImageBuffer;
6
7
  exports.blocksToPngImage = blocksToPngImage;
7
8
  exports.extractImageBufferFromPng = extractImageBufferFromPng;
8
9
  exports.createPngFromImageBuffer = createPngFromImageBuffer;
9
10
  exports.blocksPerImage = blocksPerImage;
10
11
  const core_1 = require("@pixzle/core");
11
- const jimp_1 = require("jimp");
12
+ const image_codec_1 = require("./image-codec");
12
13
  /**
13
14
  * Format error message consistently
14
15
  * @param operation Description of the operation that failed
@@ -19,20 +20,6 @@ function formatErrorMessage(operation, error) {
19
20
  const errorMessage = error instanceof Error ? error.message : "Unknown error";
20
21
  return `${operation}: ${errorMessage}`;
21
22
  }
22
- /**
23
- * Create a Jimp image from raw RGBA image buffer
24
- * @param imageBuffer Raw RGBA image buffer
25
- * @param width Image width in pixels
26
- * @param height Image height in pixels
27
- * @returns Jimp image instance
28
- */
29
- function createJimpFromImageBuffer(imageBuffer, width, height) {
30
- return new jimp_1.Jimp({
31
- data: imageBuffer,
32
- width,
33
- height,
34
- });
35
- }
36
23
  /**
37
24
  * Split an RGBA image buffer into an array of blocks (Node.js Buffer wrapper)
38
25
  * @param buffer Source image buffer (RGBA format)
@@ -66,11 +53,10 @@ function blocksToImageBuffer(blocks, width, height, blockSize) {
66
53
  */
67
54
  async function imageToBlocks(input, blockSize) {
68
55
  try {
69
- // Load and process image with Jimp (automatically converts to RGBA)
70
- const image = await jimp_1.Jimp.read(input);
71
- const { width, height } = image.bitmap;
56
+ const image = await (0, image_codec_1.decodeImage)(input);
57
+ const { width, height } = image;
72
58
  const channels = core_1.RGBA_CHANNELS;
73
- const imageBuffer = image.bitmap.data;
59
+ const imageBuffer = image.imageBuffer;
74
60
  // Split image into blocks
75
61
  const blocks = splitImageToBlocks(imageBuffer, width, height, blockSize);
76
62
  const blockCounts = (0, core_1.calculateBlockCounts)(width, height, blockSize);
@@ -87,6 +73,21 @@ async function imageToBlocks(input, blockSize) {
87
73
  throw new Error(`${formatErrorMessage("Failed to process image file", error)}. The manifest file may not match the image data.`);
88
74
  }
89
75
  }
76
+ /**
77
+ * Load an image and return its raw RGBA buffer and dimensions
78
+ * @param input Path to the image file or Buffer containing image data
79
+ * @returns Promise resolving to image buffer and dimensions
80
+ */
81
+ async function loadImageBuffer(input) {
82
+ try {
83
+ const image = await (0, image_codec_1.decodeImage)(input);
84
+ const { width, height, imageBuffer } = image;
85
+ return { imageBuffer, width, height };
86
+ }
87
+ catch (error) {
88
+ throw new Error(formatErrorMessage("Failed to load image buffer", error));
89
+ }
90
+ }
90
91
  /**
91
92
  * Reconstruct a PNG image from blocks
92
93
  * @param blocks Array of block buffers
@@ -105,15 +106,14 @@ async function blocksToPngImage(blocks, width, height, blockSize) {
105
106
  }
106
107
  }
107
108
  /**
108
- * Extract raw RGBA image buffer from a PNG buffer using Jimp
109
+ * Extract raw RGBA image buffer from a PNG buffer
109
110
  * @param pngBuffer PNG image buffer
110
111
  * @returns Promise resolving to image buffer and image dimensions
111
112
  */
112
113
  async function extractImageBufferFromPng(pngBuffer) {
113
114
  try {
114
- const image = await jimp_1.Jimp.read(pngBuffer);
115
- const { width, height } = image.bitmap;
116
- const imageBuffer = Buffer.from(image.bitmap.data);
115
+ const image = await (0, image_codec_1.decodeImage)(pngBuffer);
116
+ const { width, height, imageBuffer } = image;
117
117
  return { imageBuffer, width, height };
118
118
  }
119
119
  catch (error) {
@@ -121,7 +121,7 @@ async function extractImageBufferFromPng(pngBuffer) {
121
121
  }
122
122
  }
123
123
  /**
124
- * Create a PNG buffer from raw RGBA image buffer using Jimp
124
+ * Create a PNG buffer from raw RGBA image buffer
125
125
  * @param imageBuffer Raw RGBA image buffer
126
126
  * @param width Image width in pixels
127
127
  * @param height Image height in pixels
@@ -129,8 +129,7 @@ async function extractImageBufferFromPng(pngBuffer) {
129
129
  */
130
130
  async function createPngFromImageBuffer(imageBuffer, width, height) {
131
131
  try {
132
- const image = createJimpFromImageBuffer(imageBuffer, width, height);
133
- return await image.getBuffer(jimp_1.JimpMime.png);
132
+ return await (0, image_codec_1.encodePng)(imageBuffer, width, height);
134
133
  }
135
134
  catch (error) {
136
135
  throw new Error(formatErrorMessage("Failed to create PNG from image buffer", error));
@@ -166,4 +165,4 @@ function blocksPerImage(allBlocks, fragmentBlocksCount, seed, processFunc) {
166
165
  }
167
166
  return processedBlocks.slice(0, globalOffset);
168
167
  }
169
- //# sourceMappingURL=block.js.map
168
+ //# sourceMappingURL=image-buffer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image-buffer.js","sourceRoot":"","sources":["../src/image-buffer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ interface DecodedImageResult {
2
+ imageBuffer: Buffer;
3
+ width: number;
4
+ height: number;
5
+ format?: string;
6
+ }
7
+ export declare function decodeImage(input: string | Buffer): Promise<DecodedImageResult>;
8
+ export declare function encodePng(imageBuffer: Buffer, width: number, height: number): Promise<Buffer>;
9
+ export declare function writePngFile(outputPath: string, imageBuffer: Buffer, width: number, height: number): Promise<void>;
10
+ export {};
@@ -0,0 +1,46 @@
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.decodeImage = decodeImage;
7
+ exports.encodePng = encodePng;
8
+ exports.writePngFile = writePngFile;
9
+ const core_1 = require("@pixzle/core");
10
+ const sharp_1 = __importDefault(require("sharp"));
11
+ function createRawImagePipeline(imageBuffer, width, height) {
12
+ return (0, sharp_1.default)(imageBuffer, {
13
+ raw: {
14
+ width,
15
+ height,
16
+ channels: core_1.RGBA_CHANNELS,
17
+ },
18
+ });
19
+ }
20
+ async function decodeImage(input) {
21
+ const image = (0, sharp_1.default)(input).ensureAlpha();
22
+ const metadata = await image.metadata();
23
+ const { data, info } = await image
24
+ .raw()
25
+ .toBuffer({ resolveWithObject: true });
26
+ if (!info.width || !info.height) {
27
+ throw new Error("Decoded image is missing dimensions");
28
+ }
29
+ return {
30
+ imageBuffer: Buffer.from(data),
31
+ width: info.width,
32
+ height: info.height,
33
+ format: metadata.format ?? info.format,
34
+ };
35
+ }
36
+ async function encodePng(imageBuffer, width, height) {
37
+ return await createRawImagePipeline(imageBuffer, width, height)
38
+ .png()
39
+ .toBuffer();
40
+ }
41
+ async function writePngFile(outputPath, imageBuffer, width, height) {
42
+ await createRawImagePipeline(imageBuffer, width, height)
43
+ .png()
44
+ .toFile(outputPath);
45
+ }
46
+ //# sourceMappingURL=image-codec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image-codec.js","sourceRoot":"","sources":["../src/image-codec.ts"],"names":[],"mappings":";;;;;AAwBA,kCAmBC;AAED,8BAQC;AAED,oCASC;AAhED,uCAA6C;AAC7C,kDAA0B;AAS1B,SAAS,sBAAsB,CAC7B,WAAmB,EACnB,KAAa,EACb,MAAc;IAEd,OAAO,IAAA,eAAK,EAAC,WAAW,EAAE;QACxB,GAAG,EAAE;YACH,KAAK;YACL,MAAM;YACN,QAAQ,EAAE,oBAAa;SACxB;KACF,CAAC,CAAC;AACL,CAAC;AAEM,KAAK,UAAU,WAAW,CAC/B,KAAsB;IAEtB,MAAM,KAAK,GAAG,IAAA,eAAK,EAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;IACzC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,QAAQ,EAAE,CAAC;IACxC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,MAAM,KAAK;SAC/B,GAAG,EAAE;SACL,QAAQ,CAAC,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC,CAAC;IAEzC,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;QAChC,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;IACzD,CAAC;IAED,OAAO;QACL,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;QAC9B,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,MAAM,EAAE,QAAQ,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM;KACvC,CAAC;AACJ,CAAC;AAEM,KAAK,UAAU,SAAS,CAC7B,WAAmB,EACnB,KAAa,EACb,MAAc;IAEd,OAAO,MAAM,sBAAsB,CAAC,WAAW,EAAE,KAAK,EAAE,MAAM,CAAC;SAC5D,GAAG,EAAE;SACL,QAAQ,EAAE,CAAC;AAChB,CAAC;AAEM,KAAK,UAAU,YAAY,CAChC,UAAkB,EAClB,WAAmB,EACnB,KAAa,EACb,MAAc;IAEd,MAAM,sBAAsB,CAAC,WAAW,EAAE,KAAK,EAAE,MAAM,CAAC;SACrD,GAAG,EAAE;SACL,MAAM,CAAC,UAAU,CAAC,CAAC;AACxB,CAAC"}
package/dist/index.js CHANGED
@@ -49,24 +49,15 @@ const pixzle = {
49
49
  };
50
50
  exports.default = pixzle;
51
51
  function validateCommonOptions(options, context) {
52
- if (!options)
53
- throw new Error(`[${context}] Options object is required.`);
54
- const { images, outputDir } = options;
55
- if (!images || !Array.isArray(images) || images.length === 0)
56
- throw new Error(`[${context}] images must be a non-empty array.`);
57
- if (!outputDir || typeof outputDir !== "string")
58
- throw new Error(`[${context}] outputDir is required and must be a string.`);
52
+ (0, core_1.validateOptionsWithImages)(options, context);
53
+ (0, core_1.validateOutputDirectoryOption)(options, context);
59
54
  return options;
60
55
  }
61
56
  function validateShuffleOptions(options) {
62
57
  return validateCommonOptions(options, "shuffle");
63
58
  }
64
59
  function validateRestoreOptions(options) {
65
- const { manifest, manifestData } = options;
66
- if (!manifest && !manifestData)
67
- throw new Error("[restore] Either manifest or manifestData is required.");
68
- if (manifest && typeof manifest !== "string")
69
- throw new Error("[restore] manifest must be a string.");
60
+ (0, core_1.validateManifestOptions)(options, "restore");
70
61
  return validateCommonOptions(options, "restore");
71
62
  }
72
63
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,uCAasB;AACtB,iCAA+D;AAO7D,sFAPkB,YAAK,OAOlB;AANP,6CAA+C;AAI7C,gGAJO,4BAAe,OAIP;AAHjB,yCAA2C;AAIzC,8FAJO,wBAAa,OAIP;AAMf,KAAK,UAAU,OAAO,CAAC,OAAuB;IAC5C,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,sBAAsB,CAAC,OAAO,CAAC,CAAC;IAEtE,MAAM,UAAU,GAAG,IAAI,4BAAe,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;IACrD,MAAM,EAAE,QAAQ,EAAE,gBAAgB,EAAE,GAClC,MAAM,UAAU,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;IAE1C,MAAM,IAAA,gBAAS,EAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IACjC,MAAM,IAAA,gBAAS,EACb,SAAS,EACT,yBAAkB,EAClB,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAClC,CAAC;IAEF,MAAM,OAAO,CAAC,GAAG,CACf,gBAAgB,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE;QAC9B,MAAM,QAAQ,GAAG,IAAA,+BAAwB,EAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QACvD,OAAO,IAAA,gBAAS,EAAC,SAAS,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC;IAC7C,CAAC,CAAC,CACH,CAAC;IAEF,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,KAAK,UAAU,OAAO,CAAC,OAAuB;IAC5C,MAAM,EACJ,MAAM,EACN,QAAQ,EAAE,cAAc,EACxB,YAAY,EACZ,SAAS,GACV,GAAG,sBAAsB,CAAC,OAAO,CAAC,CAAC;IAEpC,IAAI,QAAsB,CAAC;IAC3B,IAAI,YAAY,EAAE,CAAC;QACjB,QAAQ,GAAG,YAAY,CAAC;IAC1B,CAAC;SAAM,IAAI,cAAc,EAAE,CAAC;QAC1B,QAAQ,GAAG,MAAM,IAAA,eAAQ,EAAe,cAAc,CAAC,CAAC;IAC1D,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;IAC3C,CAAC;IAED,IAAA,iCAA0B,EAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAE7C,MAAM,QAAQ,GAAG,IAAI,wBAAa,EAAE,CAAC;IACrC,MAAM,cAAc,GAAG,MAAM,QAAQ,CAAC,aAAa,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAEtE,MAAM,IAAA,gBAAS,EAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAEjC,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC;IACnC,MAAM,OAAO,CAAC,GAAG,CACf,cAAc,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE;QAC5B,MAAM,QAAQ,GACZ,IAAA,uCAAgC,EAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YAC/C,IAAA,+BAAwB,EAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QACxC,OAAO,IAAA,gBAAS,EAAC,SAAS,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC;IAC7C,CAAC,CAAC,CACH,CAAC;AACJ,CAAC;AAED,MAAM,MAAM,GAAG;IACb,OAAO;IACP,OAAO;CACR,CAAC;AAEF,kBAAe,MAAM,CAAC;AAEtB,SAAS,qBAAqB,CAC5B,OAAU,EACV,OAAe;IAEf,IAAA,gCAAyB,EAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC5C,IAAA,oCAA6B,EAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAChD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,sBAAsB,CAAC,OAAuB;IACrD,OAAO,qBAAqB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;AACnD,CAAC;AAED,SAAS,sBAAsB,CAAC,OAAuB;IACrD,IAAA,8BAAuB,EAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IAC5C,OAAO,qBAAqB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;AACnD,CAAC"}
@@ -1,9 +1,5 @@
1
1
  import { type ManifestData } from "@pixzle/core";
2
2
  export declare class ImageRestorer {
3
3
  restoreImages(fragments: (string | Buffer)[], manifest: ManifestData): Promise<Buffer[]>;
4
- private _reconstructImages;
5
- private _prepareData;
6
- private _readBlocksFromFragment;
7
- private _readBlocks;
8
- private _createImage;
4
+ private loadFragment;
9
5
  }
package/dist/restorer.js CHANGED
@@ -2,52 +2,21 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ImageRestorer = void 0;
4
4
  const core_1 = require("@pixzle/core");
5
- const seeded_shuffle_1 = require("@tuki0918/seeded-shuffle");
6
- const block_1 = require("./block");
7
5
  const file_1 = require("./file");
6
+ const image_buffer_1 = require("./image-buffer");
8
7
  class ImageRestorer {
9
8
  async restoreImages(fragments, manifest) {
10
- const { blocks, blockCountsPerImage } = await this._prepareData(fragments, manifest);
11
- const restored = manifest.config.crossImageShuffle
12
- ? (0, seeded_shuffle_1.unshuffle)(blocks, manifest.config.seed)
13
- : (0, block_1.blocksPerImage)(blocks, blockCountsPerImage, manifest.config.seed, seeded_shuffle_1.unshuffle);
14
- return await this._reconstructImages(restored, manifest);
9
+ (0, core_1.validateFragmentImageCount)(fragments, manifest);
10
+ const fragmentImages = await Promise.all(fragments.map((fragment) => this.loadFragment(fragment)));
11
+ const restoredBuffers = (0, core_1.restoreImageBuffers)(fragmentImages, manifest);
12
+ return await Promise.all(restoredBuffers.map((buffer, index) => (0, image_buffer_1.createPngFromImageBuffer)(Buffer.from(buffer), manifest.images[index].w, manifest.images[index].h)));
15
13
  }
16
- async _reconstructImages(blocks, manifest) {
17
- const blockCountsPerImage = (0, core_1.calculateBlockCountsPerImage)(manifest.images, manifest.config.blockSize);
18
- return await Promise.all(manifest.images.map(async (imageInfo, index) => {
19
- const { start, end } = (0, core_1.calculateBlockRange)(blockCountsPerImage, index);
20
- const imageBlocks = blocks.slice(start, end);
21
- return await this._createImage(imageBlocks, manifest.config.blockSize, imageInfo);
22
- }));
23
- }
24
- async _prepareData(fragments, manifest) {
25
- const totalBlocks = (0, core_1.calculateTotalBlocks)(manifest.images, manifest.config.blockSize);
26
- const blockCountsForCrossImages = (0, core_1.calculateBlockCountsForCrossImages)(totalBlocks, fragments.length);
27
- // Calculate actual block counts per image for per-image unshuffle
28
- const blockCountsPerImage = (0, core_1.calculateBlockCountsPerImage)(manifest.images, manifest.config.blockSize);
29
- // Use blockCountsPerImage when crossImageShuffle is false
30
- const blockCounts = manifest.config.crossImageShuffle
31
- ? blockCountsForCrossImages
32
- : blockCountsPerImage;
33
- const blocks = await this._readBlocks(fragments, manifest, blockCounts);
34
- return { blocks, blockCountsPerImage };
35
- }
36
- // Extract an array of blocks (Buffer) from a fragment image
37
- async _readBlocksFromFragment(fragment, manifest, expectedCount) {
14
+ async loadFragment(fragment) {
38
15
  const buffer = Buffer.isBuffer(fragment)
39
16
  ? fragment
40
17
  : await (0, file_1.loadBuffer)(fragment);
41
- const { blocks } = await (0, block_1.imageToBlocks)(buffer, manifest.config.blockSize);
42
- return (0, core_1.takeBlocks)(blocks, expectedCount);
43
- }
44
- async _readBlocks(fragments, manifest, blockCounts) {
45
- const blockGroups = await Promise.all(fragments.map((fragment, i) => this._readBlocksFromFragment(fragment, manifest, blockCounts[i])));
46
- return blockGroups.flat();
47
- }
48
- async _createImage(blocks, blockSize, imageInfo) {
49
- const { w, h } = imageInfo;
50
- return await (0, block_1.blocksToPngImage)(blocks, w, h, blockSize);
18
+ const { imageBuffer, width, height } = await (0, image_buffer_1.loadImageBuffer)(buffer);
19
+ return { buffer: imageBuffer, width, height };
51
20
  }
52
21
  }
53
22
  exports.ImageRestorer = ImageRestorer;
@@ -1 +1 @@
1
- {"version":3,"file":"restorer.js","sourceRoot":"","sources":["../src/restorer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"restorer.js","sourceRoot":"","sources":["../src/restorer.ts"],"names":[],"mappings":";;;AAAA,uCAKsB;AACtB,iCAAoC;AACpC,iDAA2E;AAE3E,MAAa,aAAa;IACxB,KAAK,CAAC,aAAa,CACjB,SAA8B,EAC9B,QAAsB;QAEtB,IAAA,iCAA0B,EAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QAEhD,MAAM,cAAc,GAAG,MAAM,OAAO,CAAC,GAAG,CACtC,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CACzD,CAAC;QACF,MAAM,eAAe,GAAG,IAAA,0BAAmB,EAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QAEtE,OAAO,MAAM,OAAO,CAAC,GAAG,CACtB,eAAe,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CACpC,IAAA,uCAAwB,EACtB,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EACnB,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EACxB,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CACzB,CACF,CACF,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,YAAY,CACxB,QAAyB;QAEzB,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC;YACtC,CAAC,CAAC,QAAQ;YACV,CAAC,CAAC,MAAM,IAAA,iBAAU,EAAC,QAAQ,CAAC,CAAC;QAC/B,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,IAAA,8BAAe,EAAC,MAAM,CAAC,CAAC;QACrE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAChD,CAAC;CACF;AAhCD,sCAgCC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pixzle/node",
3
- "version": "0.1.6",
3
+ "version": "0.1.8",
4
4
  "description": "Node.js implementation of image fragmentation and restoration",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -22,13 +22,16 @@
22
22
  "directory": "packages/node"
23
23
  },
24
24
  "license": "MIT",
25
+ "engines": {
26
+ "node": ">=20"
27
+ },
25
28
  "publishConfig": {
26
29
  "access": "public"
27
30
  },
28
31
  "dependencies": {
29
32
  "@tuki0918/seeded-shuffle": "^1.0.0",
30
- "jimp": "^1.6.0",
31
- "@pixzle/core": "0.1.6"
33
+ "sharp": "^0.34.4",
34
+ "@pixzle/core": "0.1.8"
32
35
  },
33
36
  "devDependencies": {
34
37
  "@types/node": "^22.10.2",
package/dist/block.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"block.js","sourceRoot":"","sources":["../src/block.ts"],"names":[],"mappings":"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"}