Initial commit

This commit is contained in:
robert committed 2025-05-30 18:13:30 +08:00
commit e49726988c
5445 files changed
+1089914

No files matched your search

+85
View File
@@ -0,0 +1,85 @@
import { RGBAColor, JimpClass, Bitmap, RGBColor } from "@jimp/types";
export declare function clone<I extends JimpClass>(image: I): I;
export declare function scan<I extends JimpClass>(image: I, f: (this: I, x: number, y: number, idx: number) => any): I;
export declare function scan<I extends {
bitmap: Bitmap;
}>(image: I, x: number, y: number, w: number, h: number, cb: (x: number, y: number, idx: number) => any): I;
export declare function scanIterator<I extends JimpClass>(image: I, x: number, y: number, w: number, h: number): Generator<{
x: number;
y: number;
idx: number;
image: I;
}, void, unknown>;
/**
* A helper method that converts RGBA values to a single integer value
* @param i A single integer value representing an RGBA colour (e.g. 0xFF0000FF for red)
* @returns An object with the properties r, g, b and a representing RGBA values
* @example
* ```ts
* import { intToRGBA } from "@jimp/utils";
*
* intToRGBA(0xFF0000FF); // { r: 255, g: 0, b: 0, a:255 }
* ```
*/
export declare function intToRGBA(i: number): RGBAColor;
/**
* A static helper method that converts RGBA values to a single integer value
* @param r the red value (0-255)
* @param g the green value (0-255)
* @param b the blue value (0-255)
* @param a the alpha value (0-255)
* @example
* ```ts
* import { rgbaToInt } from "@jimp/utils";
*
* rgbaToInt(255, 0, 0, 255); // 0xFF0000FF
* ```
*/
export declare function rgbaToInt(r: number, g: number, b: number, a: number): number;
/**
* Compute color difference
* 0 means no difference, 1 means maximum difference.
* Both parameters must be an color object `{ r:val, g:val, b:val, a:val }`
* Where `a` is optional and `val` is an integer between 0 and 255.
* @param rgba1 first color to compare.
* @param rgba2 second color to compare.
* @returns float between 0 and 1.
* @example
* ```ts
* import { colorDiff } from "@jimp/utils";
*
* colorDiff(
* { r: 255, g: 0, b: 0, a: 0 },
* { r: 0, g: 255, b: 0, a: 0 },
* ); // 0.5
*
* colorDiff(
* { r: 0, g: 0, b: 0, },
* { r: 255, g: 255, b: 255, }
* ); // 0.7
* ```
*/
export declare function colorDiff(rgba1: RGBAColor | RGBColor, rgba2: RGBAColor | RGBColor): number;
/**
* Limits a number to between 0 or 255
* @example
* ```ts
* import { limit255 } from "@jimp/utils";
*
* limit255(256); // 255
* limit255(-1); // 0
* ```
*/
export declare function limit255(n: number): number;
/**
* Converts a css color (Hex, 8-digit (RGBA) Hex, RGB, RGBA, HSL, HSLA, HSV, HSVA, Named) to a hex number
* @returns A hex number representing a color
* @example
* ```ts
* import { cssColorToHex } from "@jimp/utils";
*
* cssColorToHex("rgba(255, 0, 0, 0.5)"); // "ff000080"
* ```
*/
export declare function cssColorToHex(cssColor: string | number): number;
//# sourceMappingURL=index.d.ts.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAGrE,wBAAgB,KAAK,CAAC,CAAC,SAAS,SAAS,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,CAStD;AAED,wBAAgB,IAAI,CAAC,CAAC,SAAS,SAAS,EACtC,KAAK,EAAE,CAAC,EAER,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,GAAG,GACrD,CAAC,CAAC;AACL,wBAAgB,IAAI,CAAC,CAAC,SAAS;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,EAC/C,KAAK,EAAE,CAAC,EACR,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EAET,EAAE,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,GAAG,GAC7C,CAAC,CAAC;AAuDL,wBAAiB,YAAY,CAAC,CAAC,SAAS,SAAS,EAC/C,KAAK,EAAE,CAAC,EACR,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM;;;;;kBAcV;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,MAAM,aA2BlC;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,UAsCnE;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,SAAS,CACvB,KAAK,EAAE,SAAS,GAAG,QAAQ,EAC3B,KAAK,EAAE,SAAS,GAAG,QAAQ,UAc5B;AAED;;;;;;;;;GASG;AACH,wBAAgB,QAAQ,CAAC,CAAC,EAAE,MAAM,UAKjC;AAED;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,UAMtD"}
+212
View File
@@ -0,0 +1,212 @@
import tinyColor from "tinycolor2";
export function clone(image) {
const newBitmap = {
width: image.bitmap.width,
height: image.bitmap.height,
data: Buffer.from(image.bitmap.data),
};
// eslint-disable-next-line @typescript-eslint/no-explicit-any
return new image.constructor(newBitmap);
}
export function scan(image,
// eslint-disable-next-line @typescript-eslint/no-explicit-any
xArg, yArg, wArg, hArg,
// eslint-disable-next-line @typescript-eslint/no-explicit-any
cbArg) {
let x;
let y;
let w;
let h;
// eslint-disable-next-line @typescript-eslint/no-explicit-any
let cb;
if (typeof xArg === "function") {
cb = xArg;
x = 0;
y = 0;
w = image.bitmap.width;
h = image.bitmap.height;
}
else {
x = xArg;
if (typeof yArg !== "number")
throw new Error("y must be a number");
y = yArg;
if (typeof wArg !== "number")
throw new Error("w must be a number");
w = wArg;
if (typeof hArg !== "number")
throw new Error("h must be a number");
h = hArg;
if (typeof cbArg !== "function")
throw new Error("cb must be a function");
cb = cbArg;
}
// round input
x = Math.round(x);
y = Math.round(y);
w = Math.round(w);
h = Math.round(h);
const bound = cb.bind(image);
for (let _y = y; _y < y + h; _y++) {
for (let _x = x; _x < x + w; _x++) {
const idx = (image.bitmap.width * _y + _x) << 2;
// Bind the images so this.bitmap works
bound(_x, _y, idx);
}
}
return image;
}
export function* scanIterator(image, x, y, w, h) {
// round input
x = Math.round(x);
y = Math.round(y);
w = Math.round(w);
h = Math.round(h);
for (let _y = y; _y < y + h; _y++) {
for (let _x = x; _x < x + w; _x++) {
const idx = (image.bitmap.width * _y + _x) << 2;
yield { x: _x, y: _y, idx, image };
}
}
}
/**
* A helper method that converts RGBA values to a single integer value
* @param i A single integer value representing an RGBA colour (e.g. 0xFF0000FF for red)
* @returns An object with the properties r, g, b and a representing RGBA values
* @example
* ```ts
* import { intToRGBA } from "@jimp/utils";
*
* intToRGBA(0xFF0000FF); // { r: 255, g: 0, b: 0, a:255 }
* ```
*/
export function intToRGBA(i) {
if (typeof i !== "number") {
throw new Error("i must be a number");
}
const rgba = {
r: 0,
g: 0,
b: 0,
a: 0,
};
rgba.r = Math.floor(i / Math.pow(256, 3));
rgba.g = Math.floor((i - rgba.r * Math.pow(256, 3)) / Math.pow(256, 2));
rgba.b = Math.floor((i - rgba.r * Math.pow(256, 3) - rgba.g * Math.pow(256, 2)) /
Math.pow(256, 1));
rgba.a = Math.floor((i -
rgba.r * Math.pow(256, 3) -
rgba.g * Math.pow(256, 2) -
rgba.b * Math.pow(256, 1)) /
Math.pow(256, 0));
return rgba;
}
/**
* A static helper method that converts RGBA values to a single integer value
* @param r the red value (0-255)
* @param g the green value (0-255)
* @param b the blue value (0-255)
* @param a the alpha value (0-255)
* @example
* ```ts
* import { rgbaToInt } from "@jimp/utils";
*
* rgbaToInt(255, 0, 0, 255); // 0xFF0000FF
* ```
*/
export function rgbaToInt(r, g, b, a) {
if (typeof r !== "number" ||
typeof g !== "number" ||
typeof b !== "number" ||
typeof a !== "number") {
throw new Error("r, g, b and a must be numbers");
}
if (r < 0 || r > 255) {
throw new Error("r must be between 0 and 255");
}
if (g < 0 || g > 255) {
throw new Error("g must be between 0 and 255");
}
if (b < 0 || b > 255) {
throw new Error("b must be between 0 and 255");
}
if (a < 0 || a > 255) {
throw new Error("a must be between 0 and 255");
}
let i = r & 0xff;
i <<= 8;
i |= g & 0xff;
i <<= 8;
i |= b & 0xff;
i <<= 8;
i |= a & 0xff;
// Ensure sign is correct
i >>>= 0;
return i;
}
/**
* Compute color difference
* 0 means no difference, 1 means maximum difference.
* Both parameters must be an color object `{ r:val, g:val, b:val, a:val }`
* Where `a` is optional and `val` is an integer between 0 and 255.
* @param rgba1 first color to compare.
* @param rgba2 second color to compare.
* @returns float between 0 and 1.
* @example
* ```ts
* import { colorDiff } from "@jimp/utils";
*
* colorDiff(
* { r: 255, g: 0, b: 0, a: 0 },
* { r: 0, g: 255, b: 0, a: 0 },
* ); // 0.5
*
* colorDiff(
* { r: 0, g: 0, b: 0, },
* { r: 255, g: 255, b: 255, }
* ); // 0.7
* ```
*/
export function colorDiff(rgba1, rgba2) {
const sq = (n) => Math.pow(n, 2);
const { max } = Math;
const maxVal = 255 * 255 * 3;
const rgba1A = "a" in rgba1 ? rgba1.a : 255;
const rgba2A = "a" in rgba2 ? rgba2.a : 255;
return ((max(sq(rgba1.r - rgba2.r), sq(rgba1.r - rgba2.r - rgba1A + rgba2A)) +
max(sq(rgba1.g - rgba2.g), sq(rgba1.g - rgba2.g - rgba1A + rgba2A)) +
max(sq(rgba1.b - rgba2.b), sq(rgba1.b - rgba2.b - rgba1A + rgba2A))) /
maxVal);
}
/**
* Limits a number to between 0 or 255
* @example
* ```ts
* import { limit255 } from "@jimp/utils";
*
* limit255(256); // 255
* limit255(-1); // 0
* ```
*/
export function limit255(n) {
n = Math.max(n, 0);
n = Math.min(n, 255);
return n;
}
/**
* Converts a css color (Hex, 8-digit (RGBA) Hex, RGB, RGBA, HSL, HSLA, HSV, HSVA, Named) to a hex number
* @returns A hex number representing a color
* @example
* ```ts
* import { cssColorToHex } from "@jimp/utils";
*
* cssColorToHex("rgba(255, 0, 0, 0.5)"); // "ff000080"
* ```
*/
export function cssColorToHex(cssColor) {
if (typeof cssColor === "number") {
return cssColor;
}
return parseInt(tinyColor(cssColor).toHex8(), 16);
}
//# sourceMappingURL=index.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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 truncated
+3
View File
@@ -0,0 +1,3 @@
{
"type": "module"
}