{"version":3,"file":"ndarray-pixels-browser.modern.js","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","savePixelsInternal","options","imageData","putImageData","streamCanvas","convertToBlob","ab","arrayBuffer","getPixels","savePixels","typeOrOptions","quality","undefined"],"mappings":"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"}