{"version":3,"file":"ndarray-pixels-browser.cjs","sources":["../src/browser-get-pixels.ts","../src/common.ts","../src/browser-save-pixels.ts","../src/index.ts"],"sourcesContent":["import ndarray from 'ndarray';\nimport type { NdArray } from 'ndarray';\n\nexport function getPixelsInternal(\n\tbuffer: Uint8Array,\n\tmimeType: 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 blob = new Blob([buffer], { type: mimeType });\n\treturn createImageBitmap(blob, {\n\t\tpremultiplyAlpha: 'none',\n\t\tcolorSpaceConversion: 'none',\n\t}).then((img) => {\n\t\tconst canvas = new OffscreenCanvas(img.width, img.height);\n\t\tconst context = canvas.getContext('2d')!;\n\t\tcontext.drawImage(img, 0, 0);\n\t\tconst pixels = context.getImageData(0, 0, img.width, img.height);\n\t\treturn ndarray(\n\t\t\tnew Uint8Array(pixels.data),\n\t\t\t[img.width, img.height, 4],\n\t\t\t[4, 4 * img.width, 1],\n\t\t\t0,\n\t\t);\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 { putPixelData } from './common';\nimport type { ImageEncodeOptions } from './common';\n\nexport async function savePixelsInternal(\n\tpixels: NdArray,\n\toptions: ImageEncodeOptions,\n): Promise {\n\t// Create OffscreenCanvas and write pixel data.\n\tconst canvas = new OffscreenCanvas(pixels.shape[0], pixels.shape[1]);\n\n\tconst context = canvas.getContext('2d')!;\n\tconst imageData = context.getImageData(0, 0, canvas.width, canvas.height);\n\n\tputPixelData(pixels, imageData.data);\n\tcontext.putImageData(imageData, 0, 0);\n\n\treturn streamCanvas(canvas, options);\n}\n\n/** Creates readable stream from given OffscreenCanvas and options. */\nasync function streamCanvas(\n\tcanvas: OffscreenCanvas,\n\toptions: ImageEncodeOptions,\n): Promise {\n\tconst blob = await canvas.convertToBlob(options);\n\tconst ab = await blob.arrayBuffer();\n\treturn new Uint8Array(ab);\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","blob","Blob","type","createImageBitmap","premultiplyAlpha","colorSpaceConversion","then","img","canvas","OffscreenCanvas","width","height","context","getContext","drawImage","pixels","getImageData","ndarray","data","putPixelData","array","frame","shape","length","pick","ops","assign","assigns","stride","offset","streamCanvas","options","Promise","resolve","convertToBlob","arrayBuffer","ab","e","reject","savePixelsInternal","imageData","putImageData","savePixels","typeOrOptions","quality","undefined","getPixels"],"mappings":"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"}