UNPKG

replace-color-ts

Version:

Replace color with another one pixel by pixel.

87 lines (86 loc) 4.24 kB
"use strict"; 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 (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const Jimp = __importStar(require("jimp")); const convert_color_1 = __importDefault(require("./utils/convert-color")); const get_delta_1 = __importDefault(require("./utils/get-delta")); const is_number_1 = __importDefault(require("./utils/is-number")); const replace_color_error_1 = __importDefault(require("./utils/replace-color-error")); const validate_colors_1 = __importDefault(require("./utils/validate-colors")); const replaceColor = ({ image, colors, formula = "E00", deltaE = 2.3 }, callback) => { if (callback) { if (typeof callback !== "function") { throw new replace_color_error_1.default("PARAMETER_INVALID", "callback"); } } return new Promise((resolve, reject) => { callback = callback || ((err, jimpObject) => { if (err) return reject(err); return resolve(jimpObject); }); if (!image) { return callback(new replace_color_error_1.default("PARAMETER_REQUIRED", "options.image")); } const colorsValidationError = (0, validate_colors_1.default)(colors); if (colorsValidationError) { return callback(new replace_color_error_1.default(colorsValidationError.code, colorsValidationError.field)); } if (!(typeof formula === "string" && ["E76", "E94", "E00"].includes(formula))) { return callback(new replace_color_error_1.default("PARAMETER_INVALID", "options.formula")); } if (!((0, is_number_1.default)(deltaE) && deltaE >= 0 && deltaE <= 100)) { return callback(new replace_color_error_1.default("PARAMETER_INVALID", "options.deltaE")); } Jimp.read(image) .then((jimpObject) => { const targetLABColor = (0, convert_color_1.default)(colors.type, "lab", colors.targetColor); const replaceRGBColor = (0, convert_color_1.default)(colors.type, "rgb", colors.replaceColor); jimpObject.scan(0, 0, jimpObject.bitmap.width, jimpObject.bitmap.height, (x, y, idx) => { const currentLABColor = (0, convert_color_1.default)("rgb", "lab", [ jimpObject.bitmap.data[idx], jimpObject.bitmap.data[idx + 1], jimpObject.bitmap.data[idx + 2], ]); if ((0, get_delta_1.default)(currentLABColor, targetLABColor, formula) <= deltaE) { jimpObject.bitmap.data[idx] = replaceRGBColor[0]; jimpObject.bitmap.data[idx + 1] = replaceRGBColor[1]; jimpObject.bitmap.data[idx + 2] = replaceRGBColor[2]; if (replaceRGBColor[3] !== null) jimpObject.bitmap.data[idx + 3] = replaceRGBColor[3]; } }); if (callback) callback(null, jimpObject); }) .catch(callback); }); }; exports.default = replaceColor;