el.xwx.moe/lib/api/generatePreview.ts

48 lines
1.2 KiB
TypeScript
Raw Normal View History

import Jimp from "jimp";
import { prisma } from "./db";
import createFile from "./storage/createFile";
const generatePreview = async (
buffer: Buffer,
collectionId: number,
linkId: number
) => {
if (buffer && collectionId && linkId) {
2024-06-29 16:54:31 -05:00
try {
const image = await Jimp.read(buffer);
2024-06-29 16:54:31 -05:00
if (!image) {
console.log("Error generating preview: Image not found");
return;
}
2024-06-29 16:54:31 -05:00
image.resize(1280, Jimp.AUTO).quality(20);
const processedBuffer = await image.getBufferAsync(Jimp.MIME_JPEG);
2024-06-29 16:54:31 -05:00
if (
Buffer.byteLength(processedBuffer) >
1024 * 1024 * Number(process.env.PREVIEW_MAX_BUFFER || 0.1)
) {
console.log("Error generating preview: Buffer size exceeded");
return;
}
2024-06-29 16:54:31 -05:00
await createFile({
data: processedBuffer,
filePath: `archives/preview/${collectionId}/${linkId}.jpeg`,
});
await prisma.link.update({
where: { id: linkId },
data: {
preview: `archives/preview/${collectionId}/${linkId}.jpeg`,
},
});
} catch (err) {
console.error("Error processing the image:", err);
2024-06-29 16:54:31 -05:00
}
}
};
export default generatePreview;