UNPKG

one

Version:

One is a React framework for web, iOS, and Android apps.

1 lines • 6.27 kB
{"version":3,"file":"index.js","names":[],"sources":["esm/platform/image-manipulator/index.js"],"sourcesContent":["import { missingNativeBuild } from \"../nativeError\";\nfunction pixels(value, zero = false) {\n if (!Number.isInteger(value) || value < (zero ? 0 : 1) || value > 1e5)\n throw new Error(\"ImageManipulator.transform: expected a whole pixel count\");\n return value;\n}\nfunction size(width, height) {\n if (width > 1e4 || height > 1e4 || width * height > 25e6)\n throw new Error(\n \"ImageManipulator.transform: output is limited to 25 megapixels and 10,000 pixels per side\"\n );\n}\nasync function transform(uri, options = {}) {\n if (typeof window === \"undefined\")\n throw missingNativeBuild(\"ImageManipulator.transform\");\n const { crop, resize, rotate = 0, flip, format = \"jpeg\", quality } = options;\n if (![\"jpeg\", \"png\", \"webp\"].includes(format) || ![0, 90, 180, 270].includes(rotate))\n throw new Error(\"ImageManipulator.transform: invalid format or rotation\");\n if (flip != null && flip !== \"horizontal\" && flip !== \"vertical\")\n throw new Error(\"ImageManipulator.transform: flip must be 'horizontal' or 'vertical'\");\n if (format === \"png\" && quality != null || quality != null && (!Number.isFinite(quality) || quality < 0 || quality > 1))\n throw new Error(\n \"ImageManipulator.transform: quality applies only to JPEG or WebP and must be between 0 and 1\"\n );\n const image = new window.Image();\n image.crossOrigin = \"anonymous\";\n image.src = uri;\n await image.decode();\n const x = pixels(crop?.x ?? 0, true), y = pixels(crop?.y ?? 0, true);\n const cw = pixels(crop?.width ?? image.naturalWidth), ch = pixels(crop?.height ?? image.naturalHeight);\n if (x + cw > image.naturalWidth || y + ch > image.naturalHeight)\n throw new Error(\"ImageManipulator.transform: crop must fit inside the source image\");\n if (resize && resize.width == null && resize.height == null)\n throw new Error(\"ImageManipulator.transform: resize needs a width or height\");\n let width = resize?.width == null ? cw : pixels(resize.width);\n let height = resize?.height == null ? ch : pixels(resize.height);\n if (resize?.width == null && resize?.height != null)\n width = Math.max(1, Math.round(cw * height / ch));\n if (resize?.height == null && resize?.width != null)\n height = Math.max(1, Math.round(ch * width / cw));\n size(width, height);\n const canvas = document.createElement(\"canvas\");\n canvas.width = rotate === 90 || rotate === 270 ? height : width;\n canvas.height = rotate === 90 || rotate === 270 ? width : height;\n const context = canvas.getContext(\"2d\");\n if (!context) throw new Error(\"ImageManipulator.transform: canvas is unavailable\");\n context.translate(canvas.width / 2, canvas.height / 2);\n if (flip === \"horizontal\") context.scale(-1, 1);\n else if (flip === \"vertical\") context.scale(1, -1);\n context.rotate(rotate * Math.PI / 180);\n let source = image;\n if (crop) {\n const cropped = document.createElement(\"canvas\");\n cropped.width = cw;\n cropped.height = ch;\n const cropContext = cropped.getContext(\"2d\");\n if (!cropContext) throw new Error(\"ImageManipulator.transform: canvas is unavailable\");\n cropContext.drawImage(image, x, y, cw, ch, 0, 0, cw, ch);\n source = cropped;\n }\n context.drawImage(source, -width / 2, -height / 2, width, height);\n const blob = await new Promise(\n (resolve, reject) => canvas.toBlob(\n (value) => value ? resolve(value) : reject(new Error(\"ImageManipulator.transform: encoding failed\")),\n `image/${format}`,\n quality ?? 0.9\n )\n );\n return {\n uri: URL.createObjectURL(blob),\n width: canvas.width,\n height: canvas.height,\n size: blob.size\n };\n}\nconst ImageManipulator = Object.freeze({ transform });\nexport {\n ImageManipulator\n};\n//# sourceMappingURL=index.js.map\n"],"mappings":"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"}