{"version":3,"file":"ndarray-pixels-node.modern.js","sources":["../src/node-get-pixels.ts","../src/common.ts","../src/node-save-pixels.ts","../src/index.ts"],"sourcesContent":["import ndarray, { type NdArray } from 'ndarray';\nimport sharp from 'sharp';\n\nexport async function getPixelsInternal(\n\tbuffer: Uint8Array,\n\t_mimeType: string,\n): Promise> {\n\t// Warn for Data URIs, URLs, and file paths. Support removed in v3.\n\tif (!(buffer instanceof Uint8Array)) {\n\t\tthrow new Error('[ndarray-pixels] Input must be Uint8Array or Buffer.');\n\t}\n\n\tconst { data, info } = await sharp(buffer)\n\t\t.ensureAlpha()\n\t\t.raw()\n\t\t.toBuffer({ resolveWithObject: true });\n\n\treturn ndarray(\n\t\tnew Uint8Array(data),\n\t\t[info.width, info.height, 4],\n\t\t[4, (4 * info.width) | 0, 1],\n\t\t0,\n\t);\n}\n","import ndarray, { type NdArray } from 'ndarray';\nimport ops from 'ndarray-ops';\n\nexport interface ImageEncodeOptions {\n\ttype?: string;\n\tquality?: number;\n}\n\nexport function putPixelData(\n\tarray: NdArray,\n\tdata: Uint8Array | Uint8ClampedArray,\n\tframe = -1,\n): Uint8Array | Uint8ClampedArray {\n\tif (array.shape.length === 4) {\n\t\treturn putPixelData(array.pick(frame), data, 0);\n\t}\n\n\tif (array.shape.length === 3) {\n\t\tif (array.shape[2] === 3) {\n\t\t\tops.assign(\n\t\t\t\tndarray(data, [array.shape[0], array.shape[1], 3], [4, 4 * array.shape[0], 1]),\n\t\t\t\tarray,\n\t\t\t);\n\t\t\tops.assigns(ndarray(data, [array.shape[0] * array.shape[1]], [4], 3), 255);\n\t\t} else if (array.shape[2] === 4) {\n\t\t\tops.assign(\n\t\t\t\tndarray(data, [array.shape[0], array.shape[1], 4], [4, array.shape[0] * 4, 1]),\n\t\t\t\tarray,\n\t\t\t);\n\t\t} else if (array.shape[2] === 1) {\n\t\t\tops.assign(\n\t\t\t\tndarray(data, [array.shape[0], array.shape[1], 3], [4, 4 * array.shape[0], 1]),\n\t\t\t\tndarray(\n\t\t\t\t\tarray.data,\n\t\t\t\t\t[array.shape[0], array.shape[1], 3],\n\t\t\t\t\t[array.stride[0], array.stride[1], 0],\n\t\t\t\t\tarray.offset,\n\t\t\t\t),\n\t\t\t);\n\t\t\tops.assigns(ndarray(data, [array.shape[0] * array.shape[1]], [4], 3), 255);\n\t\t} else {\n\t\t\tthrow new Error('[ndarray-pixels] Incompatible array shape.');\n\t\t}\n\t} else if (array.shape.length === 2) {\n\t\tops.assign(\n\t\t\tndarray(data, [array.shape[0], array.shape[1], 3], [4, 4 * array.shape[0], 1]),\n\t\t\tndarray(\n\t\t\t\tarray.data,\n\t\t\t\t[array.shape[0], array.shape[1], 3],\n\t\t\t\t[array.stride[0], array.stride[1], 0],\n\t\t\t\tarray.offset,\n\t\t\t),\n\t\t);\n\t\tops.assigns(ndarray(data, [array.shape[0] * array.shape[1]], [4], 3), 255);\n\t} else {\n\t\tthrow new Error('[ndarray-pixels] Incompatible array shape.');\n\t}\n\n\treturn data;\n}\n","import type { NdArray } from 'ndarray';\nimport sharp, { type FormatEnum } from 'sharp';\nimport { putPixelData } from './common';\nimport type { ImageEncodeOptions } from './common';\n\nexport async function savePixelsInternal(\n\tpixels: NdArray,\n\toptions: ImageEncodeOptions,\n): Promise {\n\tconst [width, height, channels] = pixels.shape as [number, number, 4];\n\tconst data = putPixelData(pixels, new Uint8Array(width * height * channels));\n\n\tconst { type, quality } = options;\n\tconst format = (type ?? 'image/png').replace('image/', '') as keyof FormatEnum;\n\n\tconst sharpOptions = {\n\t\t// Applicable to most formats.\n\t\t// Where used, an integer between 1 and 100\n\t\tquality: typeof quality === 'number' ? Math.round(1 + quality * 99) : undefined,\n\t\t// applicable to some formats, notably webp, avif\n\t\tlossless: quality === 1,\n\t\t// if this flag is true or unset, sharp interprets the `quality` flag to mean\n\t\t// that we want lossy color quantization.\n\t\tpalette: false,\n\t};\n\n\treturn sharp(data, { raw: { width, height, channels } })\n\t\t.toFormat(format, sharpOptions)\n\t\t.toBuffer();\n}\n","import type { NdArray } from 'ndarray';\nimport { getPixelsInternal } from './node-get-pixels';\nimport { savePixelsInternal } from './node-save-pixels';\n\n/**\n * Decodes image data to an `ndarray`.\n *\n * MIME type is optional when given a path or URL, and required when given a Uint8Array.\n *\n * Accepts `image/png` or `image/jpeg` in Node.js, and additional formats on browsers with\n * the necessary support in Canvas 2D.\n *\n * @param data\n * @param mimeType `image/jpeg`, `image/png`, etc.\n * @returns\n */\nasync function getPixels(data: Uint8Array, mimeType: string): Promise> {\n\treturn getPixelsInternal(data, mimeType);\n}\n\n/**\n * Encodes an `ndarray` as image data in the given format.\n *\n * If the source `ndarray` was constructed manually with default stride, use\n * `ndarray.transpose(1, 0)` to reshape it and ensure an identical result from getPixels(). For an\n * ndarray created by getPixels(), this isn't necessary.\n *\n * Accepts `image/png` or `image/jpeg` in Node.js, and additional formats on browsers with\n * the necessary support in Canvas 2D.\n *\n * @param pixels ndarray of shape W x H x 4.\n * @param typeOrOptions object with encoding options or just the type\n * @param typeOrOptions.type target format (`image/jpeg`, `image/png`, `image/webp`, etc.)\n * @param typeOrOptions.quality quality as a number from 0 to 1, inclusive\n * @returns\n */\nasync function savePixels(\n\tpixels: NdArray,\n\ttypeOrOptions: string | { type?: string; quality?: number },\n): Promise {\n\tlet options: { type?: string; quality?: number };\n\tif (typeof typeOrOptions === 'string') {\n\t\toptions = {\n\t\t\ttype: typeOrOptions,\n\t\t\tquality: undefined,\n\t\t};\n\t} else {\n\t\toptions = {\n\t\t\ttype: typeOrOptions.type,\n\t\t\tquality: typeOrOptions.quality,\n\t\t};\n\t}\n\treturn savePixelsInternal(pixels, options);\n}\n\nexport { getPixels, savePixels };\n"],"names":["getPixelsInternal","buffer","_mimeType","Uint8Array","Error","data","info","sharp","ensureAlpha","raw","toBuffer","resolveWithObject","ndarray","width","height","putPixelData","array","frame","shape","length","pick","ops","assign","assigns","stride","offset","savePixelsInternal","pixels","options","channels","type","quality","format","replace","sharpOptions","Math","round","undefined","lossless","palette","toFormat","getPixels","mimeType","savePixels","typeOrOptions"],"mappings":"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"}