Set parameter validation Metadata for GenerateImage operations (#2611)
This commit is contained in:
parent
89feb7f9e9
commit
766100aad0
@ -12,6 +12,14 @@ import { toBase64 } from "../lib/Base64.mjs";
|
|||||||
import { isWorkerEnvironment } from "../Utils.mjs";
|
import { isWorkerEnvironment } from "../Utils.mjs";
|
||||||
import { Jimp, JimpMime, ResizeStrategy, rgbaToInt } from "jimp";
|
import { Jimp, JimpMime, ResizeStrategy, rgbaToInt } from "jimp";
|
||||||
|
|
||||||
|
// arbitrary limits to prevent resource exhaustion
|
||||||
|
// scale factor of 64 is big enough to likely result in scaling in the display
|
||||||
|
// window anyway
|
||||||
|
// pixels per row is harder to come up with a figure that won't inconvenience
|
||||||
|
// someone. 2048 feels like a reasonable compromise
|
||||||
|
const MAX_PIXEL_SCALE_FACTOR = 64;
|
||||||
|
const MAX_PIXELS_PER_ROW = 2048;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Generate Image operation
|
* Generate Image operation
|
||||||
*/
|
*/
|
||||||
@ -40,11 +48,17 @@ class GenerateImage extends Operation {
|
|||||||
name: "Pixel Scale Factor",
|
name: "Pixel Scale Factor",
|
||||||
type: "number",
|
type: "number",
|
||||||
value: 8,
|
value: 8,
|
||||||
|
integer: true,
|
||||||
|
min: 1,
|
||||||
|
max: MAX_PIXEL_SCALE_FACTOR,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Pixels per row",
|
name: "Pixels per row",
|
||||||
type: "number",
|
type: "number",
|
||||||
value: 64,
|
value: 64,
|
||||||
|
integer: true,
|
||||||
|
min: 1,
|
||||||
|
max: MAX_PIXELS_PER_ROW,
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
@ -58,14 +72,6 @@ class GenerateImage extends Operation {
|
|||||||
const [mode, scale, width] = args;
|
const [mode, scale, width] = args;
|
||||||
input = new Uint8Array(input);
|
input = new Uint8Array(input);
|
||||||
|
|
||||||
if (scale <= 0) {
|
|
||||||
throw new OperationError("Pixel Scale Factor needs to be > 0");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (width <= 0) {
|
|
||||||
throw new OperationError("Pixels per Row needs to be > 0");
|
|
||||||
}
|
|
||||||
|
|
||||||
const bytePerPixelMap = {
|
const bytePerPixelMap = {
|
||||||
Greyscale: 1,
|
Greyscale: 1,
|
||||||
RG: 2,
|
RG: 2,
|
||||||
@ -167,8 +173,10 @@ class GenerateImage extends Operation {
|
|||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const imageBuffer = await image.getBuffer(JimpMime.png);
|
// see https://nodejs.org/docs/latest-v24.x/api/buffer.html#bufbyteoffset
|
||||||
return imageBuffer.buffer;
|
// for why we can't just return result.buffer
|
||||||
|
const result = await image.getBuffer(JimpMime.png);
|
||||||
|
return result.buffer.slice(result.byteOffset, result.byteOffset + result.byteLength);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
throw new OperationError(`Error generating image. (${err})`);
|
throw new OperationError(`Error generating image. (${err})`);
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user