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