UNPKG

imagerot

Version:

A lightweight, cross-environment image library for applying unique effects via raw image buffers.

1,151 lines (1,022 loc) 111 kB
(function webpackUniversalModuleDefinition(root, factory) { if(typeof exports === 'object' && typeof module === 'object') module.exports = factory(); else if(typeof define === 'function' && define.amd) define("imagerot", [], factory); else if(typeof exports === 'object') exports["imagerot"] = factory(); else root["imagerot"] = factory(); })(this, () => { return /******/ (() => { // webpackBootstrap /******/ "use strict"; /******/ var __webpack_modules__ = ({ /***/ 104: /***/ (function(__unused_webpack_module, exports) { var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.grayscale = void 0; const defaultIntensity = 1; const global = (_a, ...args_1) => __awaiter(void 0, [_a, ...args_1], void 0, function* ({ data }, options = null) { const { intensity = defaultIntensity } = (options || {}); for (let i = 0; i < data.length; i += 4) { let r = data[i], g = data[i + 1], b = data[i + 2]; let gray = 0.299 * r + 0.587 * g + 0.114 * b; data[i] = r * (1 - intensity) + gray * intensity; data[i + 1] = g * (1 - intensity) + gray * intensity; data[i + 2] = b * (1 - intensity) + gray * intensity; } return data; }); const grayscale = { name: 'grayscale', browser: global, node: global }; exports.grayscale = grayscale; /***/ }), /***/ 428: /***/ ((__unused_webpack_module, exports) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.isBrowser = void 0; const isBrowser = () => { return typeof self !== 'undefined' || typeof window !== 'undefined'; }; exports.isBrowser = isBrowser; /***/ }), /***/ 668: /***/ (function(__unused_webpack_module, exports) { var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.blur = void 0; const defaultDirection = 'horizontal'; const defaultIntensity = 5; const global = (_a, ...args_1) => __awaiter(void 0, [_a, ...args_1], void 0, function* ({ data, width, height }, options = null) { const { direction = defaultDirection, intensity = defaultIntensity } = (options || {}); const buffer = new Uint8Array(data.length); buffer.set(data); for (let y = 0; y < height; y++) { for (let x = 0; x < width; x++) { let index = (y * width + x) * 4; let sumR = 0, sumG = 0, sumB = 0, count = 0; for (let i = 1; i <= intensity; i++) { if (direction === 'horizontal') { if (x + i < width) { let nextIndex = (y * width + x + i) * 4; sumR += data[nextIndex]; sumG += data[nextIndex + 1]; sumB += data[nextIndex + 2]; count++; } } else if (direction === 'vertical') { if (y + i < height) { let nextIndex = ((y + i) * width + x) * 4; sumR += data[nextIndex]; sumG += data[nextIndex + 1]; sumB += data[nextIndex + 2]; count++; } } } buffer[index] = sumR / count; buffer[index + 1] = sumG / count; buffer[index + 2] = sumB / count; } } return buffer; }); const blur = { name: 'blur', browser: global, node: global }; exports.blur = blur; /***/ }), /***/ 1083: /***/ ((__unused_webpack_module, exports) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.randomize = void 0; const randomize = (min, max) => { return Math.floor(Math.random() * (max - min + 1) + min); }; exports.randomize = randomize; /***/ }), /***/ 1136: /***/ (function(__unused_webpack_module, exports) { var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.borders = void 0; const defaultBorderSize = 10; const defaultBorderColor = [0, 0, 0]; const defaultBorderOpacity = 1; const global = (_a, ...args_1) => __awaiter(void 0, [_a, ...args_1], void 0, function* ({ data, width, height }, options = null) { const { size = defaultBorderSize, color = defaultBorderColor, opacity = defaultBorderOpacity } = (options || {}); for (let i = 0; i < data.length; i += 4) { let x = (i / 4) % width, y = Math.floor((i / 4) / width); if (x < size || x >= width - size || y < size || y >= height - size) { data[i] = data[i] * (1 - opacity) + color[0] * opacity; data[i + 1] = data[i + 1] * (1 - opacity) + color[1] * opacity; data[i + 2] = data[i + 2] * (1 - opacity) + color[2] * opacity; } } return data; }); const borders = { name: 'borders', browser: global, node: global }; exports.borders = borders; /***/ }), /***/ 1181: /***/ (function(__unused_webpack_module, exports) { var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.nostalgia = void 0; const nostalgia = (_a) => __awaiter(void 0, [_a], void 0, function* ({ data, width, height, effects }) { data = yield effects.degrade.method({ data, width, height }, { quality: 0.85 }); for (const direction of ['horizontal', 'vertical']) { data = (yield effects.blur.method({ data, width, height }, { direction, intensity: 2 })) || data; } data = yield effects.chromaticAberration.method({ data, width, height }, { intensity: 2 }); data = yield effects.grayscale.method({ data, width, height }, { intensity: 0.275 }); data = yield effects.noise.method({ data, width, height }, { intensity: 8 }); data = yield effects.brightness.method({ data, width, height }, { brightness: 2 }); return data; }); exports.nostalgia = nostalgia; /***/ }), /***/ 1233: /***/ (function(__unused_webpack_module, exports, __webpack_require__) { var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.rainbow = void 0; const math_1 = __webpack_require__(8421); const global = (_a) => __awaiter(void 0, [_a], void 0, function* ({ data, width, height }) { const rPhase = (0, math_1.random)() * 2 * math_1.PI; const gPhase = (0, math_1.random)() * 2 * math_1.PI; const bPhase = (0, math_1.random)() * 2 * math_1.PI; for (let i = 0; i < data.length; i += 4) { const x = (i / 4) % width; const y = (0, math_1.floor)((i / 4) / width); const grayscale = data[i]; const rWave = grayscale * (0.75 + 0.25 * (0, math_1.sin)(2 * math_1.PI * (x / width) + rPhase)); const gWave = grayscale * (0.75 + 0.25 * (0, math_1.sin)(2 * math_1.PI * (y / height) + gPhase)); const bWwave = grayscale * (0.75 + 0.25 * (0, math_1.sin)(2 * math_1.PI * ((x / width + y / height) + bPhase))); data[i] = (0, math_1.pow)(rWave / 255, 0.75) * 255; data[i + 1] = (0, math_1.pow)(gWave / 255, 0.75) * 255; data[i + 2] = (0, math_1.pow)(bWwave / 255, 0.75) * 255; } return data; }); const rainbow = { name: 'rainbow', browser: global, node: global }; exports.rainbow = rainbow; /***/ }), /***/ 1356: /***/ (function(__unused_webpack_module, exports) { var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.sharpen = void 0; const global = (_a) => __awaiter(void 0, [_a], void 0, function* ({ data, width, height }) { const kernel = [ 0, -1, 0, -1, 5, -1, 0, -1, 0 ]; const target = new Uint8Array(data.length); for (let y = 0; y < height; y++) { for (let x = 0; x < width; x++) { const idx = (y * width + x) * 4; let r = 0, g = 0, b = 0; for (let ky = -1; ky <= 1; ky++) { for (let kx = -1; kx <= 1; kx++) { const xSample = Math.max(0, Math.min(width - 1, x + kx)); const ySample = Math.max(0, Math.min(height - 1, y + ky)); const sampleIdx = (ySample * width + xSample) * 4; const kernelIdx = (ky + 1) * 3 + (kx + 1); r += data[sampleIdx + 0] * kernel[kernelIdx]; g += data[sampleIdx + 1] * kernel[kernelIdx]; b += data[sampleIdx + 2] * kernel[kernelIdx]; } } target[idx + 0] = Math.min(255, Math.max(0, r)); target[idx + 1] = Math.min(255, Math.max(0, g)); target[idx + 2] = Math.min(255, Math.max(0, b)); target[idx + 3] = data[idx + 3]; } } data.set(target); return data; }); const sharpen = { name: 'sharpen', browser: global, node: global }; exports.sharpen = sharpen; /***/ }), /***/ 1433: /***/ ((__unused_webpack_module, exports, __webpack_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.degrade = exports.pixelate = void 0; var browser_1 = __webpack_require__(3629); Object.defineProperty(exports, "pixelate", ({ enumerable: true, get: function () { return browser_1.pixelate; } })); var browser_2 = __webpack_require__(7143); Object.defineProperty(exports, "degrade", ({ enumerable: true, get: function () { return browser_2.degrade; } })); /***/ }), /***/ 1935: /***/ ((__unused_webpack_module, exports) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.removeAlphaChannel = void 0; const removeAlphaChannel = (data) => { for (let i = 0; i < data.length; i += 4) { data[i + 3] = 255; } return data; }; exports.removeAlphaChannel = removeAlphaChannel; /***/ }), /***/ 2024: /***/ (function(__unused_webpack_module, exports) { var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.applyEffect = void 0; const getEffect = (effectPool, effect) => { for (let [key, value] of Object.entries(effectPool)) { if (key === effect) { return value.method; } } return null; }; const applyEffect = (_a) => __awaiter(void 0, [_a], void 0, function* ({ data, width, height, effectPool, effect, options = null }) { return new Promise((resolve, reject) => __awaiter(void 0, void 0, void 0, function* () { try { const buffer = yield getEffect(effectPool, effect)({ data, width, height }, options); if (buffer) { resolve({ data: buffer, width, height }); } else { reject('Buffer is null'); } } catch (error) { reject(error); } })); }); exports.applyEffect = applyEffect; /***/ }), /***/ 2055: /***/ (function(__unused_webpack_module, exports, __webpack_require__) { var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || (function () { var ownKeys = function(o) { ownKeys = Object.getOwnPropertyNames || function (o) { var ar = []; for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; return ar; }; return ownKeys(o); }; return function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); __setModuleDefault(result, mod); return result; }; })(); var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.rgbToHsv = exports.hsvToRgb = exports.urlToBuffer = exports.fileToBuffer = exports.bufferToBitmap = exports.bufferToBlob = exports.useMode = exports.useEffect = exports.listEffects = exports.listModes = exports.stage = void 0; const urlToBuffer_1 = __webpack_require__(9954); Object.defineProperty(exports, "urlToBuffer", ({ enumerable: true, get: function () { return urlToBuffer_1.urlToBuffer; } })); const global_1 = __webpack_require__(4250); const bufferToBitmap_1 = __webpack_require__(9520); Object.defineProperty(exports, "bufferToBitmap", ({ enumerable: true, get: function () { return bufferToBitmap_1.bufferToBitmap; } })); const fileToBuffer_1 = __webpack_require__(5241); Object.defineProperty(exports, "fileToBuffer", ({ enumerable: true, get: function () { return fileToBuffer_1.fileToBuffer; } })); const bufferToBlob_1 = __webpack_require__(2468); Object.defineProperty(exports, "bufferToBlob", ({ enumerable: true, get: function () { return bufferToBlob_1.bufferToBlob; } })); const helpers_1 = __webpack_require__(6527); Object.defineProperty(exports, "hsvToRgb", ({ enumerable: true, get: function () { return helpers_1.hsvToRgb; } })); Object.defineProperty(exports, "rgbToHsv", ({ enumerable: true, get: function () { return helpers_1.rgbToHsv; } })); const modes = __importStar(__webpack_require__(4634)); const browser_1 = __webpack_require__(7800); const stage = (_a) => __awaiter(void 0, [_a], void 0, function* ({ data, url }) { let [buffer, width, height] = [null, 0, 0]; if (data) { if (data instanceof File) { [buffer, width, height] = (yield (0, fileToBuffer_1.fileToBuffer)(data)); } else if (Array.isArray(data) && data[0] instanceof Uint8Array) { [buffer, width, height] = [...data]; } else if (typeof data === 'object') { let preStaged = data; if (preStaged.data instanceof Uint8Array && preStaged.width && preStaged.height) { [buffer, width, height] = [preStaged.data, preStaged.width, preStaged.height]; } } } else if (url && typeof url === 'string') { [buffer, width, height] = (yield (0, urlToBuffer_1.urlToBuffer)(url)); } if (!buffer || !width || !height) { throw new Error('Failed to load image data'); } return { data: buffer, width, height }; }); exports.stage = stage; const listModes = () => { return Object.keys(modes); }; exports.listModes = listModes; const listEffects = () => { return Object.keys(browser_1.effectPool); }; exports.listEffects = listEffects; const useEffect = (_a, effect_1, options_1) => __awaiter(void 0, [_a, effect_1, options_1], void 0, function* ({ data, width, height }, effect, options) { return (0, global_1.useEffect)({ data, width, height }, browser_1.effectPool, effect, options || {}); }); exports.useEffect = useEffect; const useMode = (_a, mode_1) => __awaiter(void 0, [_a, mode_1], void 0, function* ({ data, width, height }, mode) { return (0, global_1.useMode)({ data, width, height }, browser_1.effectPool, mode); }); exports.useMode = useMode; /***/ }), /***/ 2059: /***/ (function(__unused_webpack_module, exports, __webpack_require__) { var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.useEffect = void 0; const applyEffect_1 = __webpack_require__(2024); const useEffect = (_a, effectPool_1, effect_1, options_1) => __awaiter(void 0, [_a, effectPool_1, effect_1, options_1], void 0, function* ({ data, width, height }, effectPool, effect, options) { const effectsToUse = (!Array.isArray(effect) ? [effect] : effect); if (Array.isArray(options) && options.length !== effectsToUse.length) { throw new Error('Invalid options length'); } let i = 0; for (let currentEffect of effectsToUse) { if (!effectPool[currentEffect]) { throw new Error(`Invalid effect: ${currentEffect}`); } const applied = yield (0, applyEffect_1.applyEffect)({ data, width, height, effectPool, effect: currentEffect, options: Array.isArray(options) ? options[i] : options }); [data, width, height] = [applied.data, applied.width, applied.height]; i++; } return { data, width, height }; }); exports.useEffect = useEffect; /***/ }), /***/ 2118: /***/ (function(__unused_webpack_module, exports) { var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.vaporwave = void 0; const vaporwave = (_a) => __awaiter(void 0, [_a], void 0, function* ({ data }) { if (data.length === 0) return data; const COLORS = [ [0, 184, 255], // Cyan [255, 0, 193], // Magenta [150, 0, 255], // Purple [0, 255, 249], // Teal ]; const setPixel = (j, r, g, b, a) => { data[j] = Math.floor(Math.min(Math.max(r, 0), 255)); data[j + 1] = Math.floor(Math.min(Math.max(g, 0), 255)); data[j + 2] = Math.floor(Math.min(Math.max(b, 0), 255)); data[j + 3] = Math.floor(Math.min(Math.max(a, 0), 255)); }; const len = data.length; for (let j = 0; j < len; j += 4) { const r = data[j]; const g = data[j + 1]; const b = data[j + 2]; const a = data[j + 3]; // Preserve alpha if (r <= 15 && g <= 15 && b <= 15) { setPixel(j, 0, 0, 0, a); } else if (r > 15 && r <= 60 && g > 15 && g <= 60 && b > 15 && b <= 60) { setPixel(j, COLORS[0][0], COLORS[0][1], COLORS[0][2], a); } else if (r > 60 && r <= 120 && g > 60 && g <= 120 && b > 60 && b <= 120) { setPixel(j, COLORS[1][0], COLORS[1][1], COLORS[1][2], a); } else if (r > 120 && r <= 180 && g > 120 && g <= 180 && b > 120 && b <= 180) { setPixel(j, COLORS[2][0], COLORS[2][1], COLORS[2][2], a); } else if (r > 180 && r <= 234 && g > 180 && g <= 234 && b > 180 && b <= 234) { setPixel(j, COLORS[3][0], COLORS[3][1], COLORS[3][2], a); } else if (r >= 235 && g >= 235 && b >= 235) { setPixel(j, 255, 255, 255, a); } else { setPixel(j, r, g, b, a); // Preserve original pixel if no condition matches } } return data; }); exports.vaporwave = vaporwave; /***/ }), /***/ 2468: /***/ (function(__unused_webpack_module, exports) { var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.bufferToBlob = void 0; const bufferToBlob = (_a) => __awaiter(void 0, [_a], void 0, function* ({ data, width, height }) { const canvas = new OffscreenCanvas(width, height); const context = canvas.getContext('2d'); const clampedArray = new Uint8ClampedArray(data.buffer); const imageData = new ImageData(clampedArray, width, height); context === null || context === void 0 ? void 0 : context.putImageData(imageData, 0, 0); return canvas.convertToBlob().then((blob) => { if (blob) { return URL.createObjectURL(blob); } else { throw new Error('Failed to create Blob from canvas image'); } }); }); exports.bufferToBlob = bufferToBlob; /***/ }), /***/ 2654: /***/ (function(__unused_webpack_module, exports) { var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.brightness = void 0; const defaultBrightness = 10; const pixelOp = ({ index, data }, options = null) => { let { brightness = defaultBrightness } = (options || {}); brightness *= 2.55; for (let j = 0; j < 3; j++) { let newColorChannelValue = data[index + j] + brightness; data[index + j] = Math.max(0, Math.min(255, newColorChannelValue)); } }; const global = (_a, ...args_1) => __awaiter(void 0, [_a, ...args_1], void 0, function* ({ data }, options = null) { let { brightness = defaultBrightness } = (options || {}); brightness *= 2.55; for (let i = 0; i < data.length; i += 4) { pixelOp({ index: i, data }, { brightness }); } return data; }); const brightness = { name: 'brightness', browser: global, node: global, pixelOp: pixelOp }; exports.brightness = brightness; /***/ }), /***/ 2677: /***/ (function(__unused_webpack_module, exports) { var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.anaglyph = void 0; const global = (_a, ...args_1) => __awaiter(void 0, [_a, ...args_1], void 0, function* ({ data, width, height }, options = null) { var _b, _c, _d; const config = (options || {}); const rShift = (_b = config.redShift) !== null && _b !== void 0 ? _b : { x: 5, y: 0 }; const gShift = (_c = config.greenShift) !== null && _c !== void 0 ? _c : { x: -5, y: 0 }; const bShift = (_d = config.blueShift) !== null && _d !== void 0 ? _d : { x: 0, y: 5 }; const copy = new Uint8Array(data); for (let y = 0; y < height; y++) { for (let x = 0; x < width; x++) { const idx = (y * width + x) * 4; // Shift RED const rx = (x + rShift.x + width) % width; const ry = (y + rShift.y + height) % height; data[idx] = copy[(ry * width + rx) * 4]; // Shift GREEN const gx = (x + gShift.x + width) % width; const gy = (y + gShift.y + height) % height; data[idx + 1] = copy[(gy * width + gx) * 4 + 1]; // Shift BLUE const bx = (x + bShift.x + width) % width; const by = (y + bShift.y + height) % height; data[idx + 2] = copy[(by * width + bx) * 4 + 2]; // Alpha remains unchanged } } return data; }); const anaglyph = { name: 'anaglyph', browser: global, node: global }; exports.anaglyph = anaglyph; /***/ }), /***/ 2935: /***/ ((__unused_webpack_module, exports) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.hsvToRgb = void 0; const hsvToRgb = (h, s, v) => { let r = 0, g = 0, b = 0; let i = Math.floor(h * 6); let f = h * 6 - i; let p = v * (1 - s); let q = v * (1 - f * s); let t = v * (1 - (1 - f) * s); switch (i % 6) { case 0: r = v, g = t, b = p; break; case 1: r = q, g = v, b = p; break; case 2: r = p, g = v, b = t; break; case 3: r = p, g = q, b = v; break; case 4: r = t, g = p, b = v; break; case 5: r = v, g = p, b = q; break; } return [Math.round(r * 255), Math.round(g * 255), Math.round(b * 255)]; }; exports.hsvToRgb = hsvToRgb; /***/ }), /***/ 3097: /***/ (function(__unused_webpack_module, exports) { var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.noise = void 0; const defaultIntensity = 10; const pixelOp = ({ index, data }, options = null) => { const { intensity = defaultIntensity, ratio = null } = (options || {}); const intensityRatio = ratio ? ratio : intensity / 100; for (let j = 0; j < 3; j++) { const noise = Math.random() * 2 - 1; const adjustedNoise = noise * intensityRatio; const newColorChannelValue = data[index + j] + adjustedNoise * 255; data[index + j] = Math.max(0, Math.min(255, newColorChannelValue)); } }; const global = (_a, ...args_1) => __awaiter(void 0, [_a, ...args_1], void 0, function* ({ data }, options = null) { const { intensity = defaultIntensity, ratio = null } = (options || {}); const intensityRatio = ratio ? ratio : intensity / 100; for (let i = 0; i < data.length; i += 4) { pixelOp({ index: i, data }, { ratio: intensityRatio }); } return data; }); const noise = { name: 'noise', browser: global, node: global, pixelOp: pixelOp }; exports.noise = noise; /***/ }), /***/ 3295: /***/ ((__unused_webpack_module, exports) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.rgbToHsv = void 0; const rgbToHsv = (r, g, b) => { r /= 255, g /= 255, b /= 255; let max = Math.max(r, g, b), min = Math.min(r, g, b); let h = 0, v = max; let d = max - min; let s = max === 0 ? 0 : d / max; if (max !== min) { switch (max) { case r: h = (g - b) / d + (g < b ? 6 : 0); break; case g: h = (b - r) / d + 2; break; case b: h = (r - g) / d + 4; break; } h /= 6; } return [h, s || 0, v || 0]; }; exports.rgbToHsv = rgbToHsv; /***/ }), /***/ 3629: /***/ (function(__unused_webpack_module, exports, __webpack_require__) { var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.pixelate = void 0; const helpers_1 = __webpack_require__(6527); const defaultIntensity = 8; const browser = (_a, ...args_1) => __awaiter(void 0, [_a, ...args_1], void 0, function* ({ data, width, height }, options = null) { const { intensity = defaultIntensity } = (options || {}); const canvas = new OffscreenCanvas(width, height); const context = canvas.getContext('2d'); const imgData = new ImageData(new Uint8ClampedArray(data), width, height); context === null || context === void 0 ? void 0 : context.putImageData(imgData, 0, 0); const pCanvas = new OffscreenCanvas(width, height); const pContext = pCanvas.getContext('2d'); if (!context || !pContext) { throw new Error('Failed to obtain context'); } pContext.imageSmoothingEnabled = false; pContext.drawImage(canvas, 0, 0, width / intensity, height / intensity); pContext.drawImage(pCanvas, 0, 0, width / intensity, height / intensity, 0, 0, width, height); const pixelatedData = pContext.getImageData(0, 0, width, height).data; return (0, helpers_1.removeAlphaChannel)(new Uint8Array(pixelatedData.buffer)); }); const pixelate = { name: 'pixelate', browser: browser }; exports.pixelate = pixelate; /***/ }), /***/ 4084: /***/ (function(__unused_webpack_module, exports, __webpack_require__) { var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.chimera = void 0; const math_1 = __webpack_require__(8421); const helpers_1 = __webpack_require__(6527); const weight = [0.25, 0.5]; const chimera = (_a) => __awaiter(void 0, [_a], void 0, function* ({ data, width, height, effects }) { const algorithm = (_a) => __awaiter(void 0, [_a], void 0, function* ({ data, width, height }) { for (let y = 0; y < height; y++) { for (let x = 0; x < width; x++) { let index = (y * width + x) * 4; let r = data[index], g = data[index + 1], b = data[index + 2]; data[index + 0] = (r + g * weight[1] + b * weight[0]); data[index + 1] = (r * weight[1] + g + b * weight[0]); data[index + 2] = (r * weight[0] + g * weight[1] + b); } } return data; }); const direction = (0, math_1.random)() >= 0.5 ? 'horizontal' : 'vertical'; const intensity = (0, helpers_1.randomize)(5, 10); data = (yield effects.blur.method({ data, width, height }, { direction, intensity })) || data; data = yield algorithm({ data, width, height }); for (let index = 0; index < data.length; index += 4) { const useNoise = (0, math_1.random)() < 0.2; const useGrain = (0, math_1.random)() < 0.4 ? (0, math_1.floor)((0, math_1.random)() * 50) : 0; for (let i = 0; i < 3; i++) { data[index + i] = useNoise ? (0, math_1.min)(data[index + i] + (0, helpers_1.randomize)(1, i === 0 ? 15 : 10), 255) : data[index + i]; data[index + i] = (0, math_1.min)(255, (0, math_1.max)(0, data[index + i] + ((0, math_1.floor)((0, math_1.random)() * 20) - 30))); data[index + i] = useGrain ? (0, math_1.min)(255, (0, math_1.max)(0, data[index + i] + useGrain)) : data[index + i]; } ; } data = (yield effects.rectangles.method({ data, width, height }, { offset: 10, intensity: 15, sizeModifier: 1.25 })) || data; return data; }); exports.chimera = chimera; /***/ }), /***/ 4250: /***/ (function(__unused_webpack_module, exports, __webpack_require__) { var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __exportStar = (this && this.__exportStar) || function(m, exports) { for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); }; Object.defineProperty(exports, "__esModule", ({ value: true })); __exportStar(__webpack_require__(2059), exports); __exportStar(__webpack_require__(4637), exports); __exportStar(__webpack_require__(4742), exports); __exportStar(__webpack_require__(2024), exports); /***/ }), /***/ 4543: /***/ (function(__unused_webpack_module, exports) { var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.mirrorfold = void 0; const mirrorfold = (_a, ...args_1) => __awaiter(void 0, [_a, ...args_1], void 0, function* ({ data, width, height }, options = {}) { var _b, _c, _d; if (data.length === 0) return data; const folds = (_b = options.folds) !== null && _b !== void 0 ? _b : 4; const blendOpacity = (_c = options.blendOpacity) !== null && _c !== void 0 ? _c : 0.5; const randomOffset = (_d = options.randomOffset) !== null && _d !== void 0 ? _d : true; const tempData = new Uint8Array(data); // Copy for mirroring without overwrite // Calculate fold sizes (assume even division for simplicity; adjust for odd dims) const foldWidth = Math.floor(width / Math.sqrt(folds)); const foldHeight = Math.floor(height / Math.sqrt(folds)); const gridSize = Math.sqrt(folds); // e.g., 2 for 4 folds (2x2 grid) for (let gy = 0; gy < gridSize; gy++) { for (let gx = 0; gx < gridSize; gx++) { const baseX = gx * foldWidth; const baseY = gy * foldHeight; // Apply random offset if enabled (small glitch shift, e.g., -5 to 5 px) const offsetX = randomOffset ? Math.floor(Math.random() * 10 - 5) : 0; const offsetY = randomOffset ? Math.floor(Math.random() * 10 - 5) : 0; // Mirror the section from the top-left fold (source) to this position for (let y = 0; y < foldHeight; y++) { for (let x = 0; x < foldWidth; x++) { // Source: mirror/flip based on grid position (e.g., flip X for right folds, Y for bottom) const srcX = (gx % 2 === 1 ? foldWidth - 1 - x : x) + offsetX; const srcY = (gy % 2 === 1 ? foldHeight - 1 - y : y) + offsetY; // Clamp source coords to valid range const clampedSrcX = Math.max(0, Math.min(foldWidth - 1, srcX)); const clampedSrcY = Math.max(0, Math.min(foldHeight - 1, srcY)); const srcIdx = (clampedSrcY * width + clampedSrcX) * 4; const destIdx = ((baseY + y) * width + (baseX + x)) * 4; // Blend with original if near edges or for opacity const originalR = data[destIdx]; const originalG = data[destIdx + 1]; const originalB = data[destIdx + 2]; const mirroredR = tempData[srcIdx]; const mirroredG = tempData[srcIdx + 1]; const mirroredB = tempData[srcIdx + 2]; // Simple alpha blend data[destIdx] = Math.floor(mirroredR * blendOpacity + originalR * (1 - blendOpacity)); data[destIdx + 1] = Math.floor(mirroredG * blendOpacity + originalG * (1 - blendOpacity)); data[destIdx + 2] = Math.floor(mirroredB * blendOpacity + originalB * (1 - blendOpacity)); // Alpha unchanged } } } } return data; }); exports.mirrorfold = mirrorfold; /***/ }), /***/ 4545: /***/ (function(__unused_webpack_module, exports) { var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.dither = void 0; const defaultIntensity = 0.5; const global = (_a, ...args_1) => __awaiter(void 0, [_a, ...args_1], void 0, function* ({ data, width, height }, options = null) { const { intensity = defaultIntensity } = (options || {}); for (let i = 0; i < data.length; i += 4) { const grayscale = (data[i] + data[i + 1] + data[i + 2]) / 3; data[i] = data[i + 1] = data[i + 2] = grayscale; } for (let i = 0; i < data.length; i += 4) { const nPixel = data[i] > (intensity * 255) ? 255 : 0; const quantError = data[i] - nPixel; data[i] = nPixel; if (i + 4 < data.length) data[i + 4] = data[i + 4] + quantError * 7 / 16; if (i + (width * 4) < data.length) data[i + (width * 4)] = data[i + (width * 4)] + quantError * 5 / 16; if (i + (width * 4) + 4 < data.length) data[i + (width * 4) + 4] = data[i + (width * 4) + 4] + quantError * 1 / 16; if (i + (width * 4) - 4 >= 0) data[i + (width * 4) - 4] = data[i + (width * 4) - 4] + quantError * 3 / 16; data[i + 1] = data[i + 2] = data[i]; } return new Uint8Array(data); }); const dither = { name: 'dither', browser: global, node: global }; exports.dither = dither; /***/ }), /***/ 4588: /***/ (function(__unused_webpack_module, exports) { var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.interferenceLines = void 0; const global = (_a, ...args_1) => __awaiter(void 0, [_a, ...args_1], void 0, function* ({ data, width, height }, options = null) { var _b, _c, _d, _e; const config = (options || {}); const lineThickness = (_b = config.lineThickness) !== null && _b !== void 0 ? _b : 2; const interferenceIntensity = (_c = config.interferenceIntensity) !== null && _c !== void 0 ? _c : 0.3; const noiseIntensity = (_d = config.noiseIntensity) !== null && _d !== void 0 ? _d : 0.1; const colorBleed = (_e = config.colorBleed) !== null && _e !== void 0 ? _e : 0.2; const tempData = new Uint8Array(data); // Copy for shifts and bleeding // Apply scanlines: Darken every other set of rows for (let y = 0; y < height; y++) { const isScanline = (y % (lineThickness * 2)) < lineThickness; // Alternate bands const darkenFactor = isScanline ? 0.85 : 1.0; // Slight darken for VHS lines for (let x = 0; x < width; x++) { const idx = (y * width + x) * 4; // Darken for scanlines data[idx] = Math.floor(tempData[idx] * darkenFactor); data[idx + 1] = Math.floor(tempData[idx + 1] * darkenFactor); data[idx + 2] = Math.floor(tempData[idx + 2] * darkenFactor); // Add noise: Random perturbation if (Math.random() < noiseIntensity) { const noise = Math.floor(Math.random() * 50 - 25); // -25 to 25 shift data[idx] = Math.max(0, Math.min(255, data[idx] + noise)); data[idx + 1] = Math.max(0, Math.min(255, data[idx + 1] + noise)); data[idx + 2] = Math.max(0, Math.min(255, data[idx + 2] + noise)); } } // Interference: Random row shifts for glitchy tracking if (Math.random() < interferenceIntensity) { const shift = Math.floor(Math.random() * 10 - 5); // -5 to 5 pixel horizontal shift for (let x = 0; x < width; x++) { const srcX = Math.max(0, Math.min(width - 1, x + shift)); const idx = (y * width + x) * 4; const srcIdx = (y * width + srcX) * 4; data[idx] = tempData[srcIdx]; data[idx + 1] = tempData[srcIdx + 1]; data[idx + 2] = tempData[srcIdx + 2]; } } } // Add color bleed: Slight RGB channel shifts for VHS chromatic aberration for (let y = 0; y < height; y++) { for (let x = 0; x < width; x++) { const idx = (y * width + x) * 4; // Shift red slightly left, blue right (simple bleed) const redShift = Math.floor(colorBleed * 5); // e.g., 1 pixel if colorBleed=0.2 const blueShift = -redShift; const rSrcX = Math.max(0, Math.min(width - 1, x + redShift)); const bSrcX = Math.max(0, Math.min(width - 1, x + blueShift)); data[idx] = tempData[(y * width + rSrcX) * 4]; // Red from shifted