imagerot
Version:
A lightweight, cross-environment image library for applying unique effects via raw image buffers.
1,151 lines (1,022 loc) • 111 kB
JavaScript
(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