template-project/node_modules/@jimp/plugin-resize/dist/commonjs/index.js
2025-05-30 18:13:30 +08:00

150 lines
5.5 KiB
JavaScript

"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 __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);
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.methods = void 0;
const constants_js_1 = require("./constants.js");
const zod_1 = require("zod");
const resize_js_1 = __importDefault(require("./modules/resize.js"));
const resize2_js_1 = require("./modules/resize2.js");
__exportStar(require("./constants.js"), exports);
const ResizeOptionsSchema = zod_1.z.union([
zod_1.z.object({
/** the width to resize the image to */
w: zod_1.z.number().min(0),
/** the height to resize the image to */
h: zod_1.z.number().min(0).optional(),
/** a scaling method (e.g. ResizeStrategy.BEZIER) */
mode: zod_1.z.nativeEnum(constants_js_1.ResizeStrategy).optional(),
}),
zod_1.z.object({
/** the width to resize the image to */
w: zod_1.z.number().min(0).optional(),
/** the height to resize the image to */
h: zod_1.z.number().min(0),
/** a scaling method (e.g. ResizeStrategy.BEZIER) */
mode: zod_1.z.nativeEnum(constants_js_1.ResizeStrategy).optional(),
}),
]);
const ScaleToFitOptionsSchema = zod_1.z.object({
/** the width to resize the image to */
w: zod_1.z.number().min(0),
/** the height to resize the image to */
h: zod_1.z.number().min(0),
/** a scaling method (e.g. Jimp.RESIZE_BEZIER) */
mode: zod_1.z.nativeEnum(constants_js_1.ResizeStrategy).optional(),
});
const ScaleComplexOptionsSchema = zod_1.z.object({
/** the width to resize the image to */
f: zod_1.z.number().min(0),
/** a scaling method (e.g. Jimp.RESIZE_BEZIER) */
mode: zod_1.z.nativeEnum(constants_js_1.ResizeStrategy).optional(),
});
exports.methods = {
/**
* Resizes the image to a set width and height using a 2-pass bilinear algorithm
* @example
* ```ts
* import { Jimp } from "jimp";
*
* const image = await Jimp.read("test/image.png");
*
* image.resize({ w: 150 });
* ```
*/
resize(image, options) {
const { mode } = ResizeOptionsSchema.parse(options);
let w;
let h;
if (typeof options.w === "number") {
w = options.w;
h = options.h ?? image.bitmap.height * (w / image.bitmap.width);
}
else if (typeof options.h === "number") {
h = options.h;
w = options.w ?? image.bitmap.width * (h / image.bitmap.height);
}
else {
throw new Error("w must be a number");
}
// round inputs
w = Math.round(w) || 1;
h = Math.round(h) || 1;
if (mode && typeof resize2_js_1.operations[mode] === "function") {
const dst = {
data: Buffer.alloc(w * h * 4),
width: w,
height: h,
};
resize2_js_1.operations[mode](image.bitmap, dst);
image.bitmap = dst;
}
else {
const resize = new resize_js_1.default(image.bitmap.width, image.bitmap.height, w, h, true, true, (buffer) => {
image.bitmap.data = Buffer.from(buffer);
image.bitmap.width = w;
image.bitmap.height = h;
});
resize.resize(image.bitmap.data);
}
return image;
},
/**
* Uniformly scales the image by a factor.
* @param f the factor to scale the image by
* @param mode (optional) a scaling method (e.g. Jimp.RESIZE_BEZIER)
* @example
* ```ts
* import { Jimp } from "jimp";
*
* const image = await Jimp.read("test/image.png");
*
* image.scale(0.5);
* ```
*/
scale(image, options) {
const { f, mode } = typeof options === "number"
? { f: options }
: ScaleComplexOptionsSchema.parse(options);
const w = image.bitmap.width * f;
const h = image.bitmap.height * f;
return this.resize(image, { w, h, mode: mode });
},
/**
* Scale the image to the largest size that fits inside the rectangle that has the given width and height.
* @param w the width to resize the image to
* @param h the height to resize the image to
* @param mode a scaling method (e.g. ResizeStrategy.BEZIER)
* @example
* ```ts
* import { Jimp } from "jimp";
*
* const image = await Jimp.read("test/image.png");
*
* image.scaleToFit(100, 100);
* ```
*/
scaleToFit(image, options) {
const { h, w, mode } = ScaleToFitOptionsSchema.parse(options);
const f = w / h > image.bitmap.width / image.bitmap.height
? h / image.bitmap.height
: w / image.bitmap.width;
return this.scale(image, { f, mode: mode });
},
};
//# sourceMappingURL=index.js.map